若依基于sm-crypto实现前后端登录密码加密

2024-01-13 15:12

本文主要是介绍若依基于sm-crypto实现前后端登录密码加密,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

上一节介绍了基于jsencrypt实现的密码加密解密登录功能,这次来介绍基于sm-crypto实现前后端登录密码加密,本次采用的是sm2进行的加密解密。

后端

首先从后端代码开始写起(因为公钥和私钥都是要从java代码中生成):
首先需要引入sm-crypto的jar包,点击获取jar包,然后拷贝到下面的目录下
在这里插入图片描述
然后再pom.xml文件中引入依赖,然后刷新依赖

        <!--sm2jar包依赖--><dependency><groupId>com.sm2</groupId><artifactId>sm2</artifactId><version>1.0</version><scope>system</scope><systemPath>${basedir}/src/main/resources/lib/sm-crypto-0.3.2.jar</systemPath></dependency>

然后就是新建一个工具类

package com.ruoyi.common.utils.sm2Encrypt;import com.antherd.smcrypto.sm2.Keypair;
import com.antherd.smcrypto.sm2.Sm2;
import io.netty.util.internal.StringUtil;
import org.springframework.stereotype.Component;import java.util.ArrayList;@Component
public class SM2Encryptor {private static final SmKeyPair smKeyPair = new SmKeyPair();public static String privateKeys = "";private static String publicKeyStr = "";private static String privateKeyStr = "92b704fee9ac448ac27abfa537021ab42d0035151f01fdc03e49b0c2f5496148";/*** 加密,使用公钥** @param publicKey* @param originalText* @return*/public static String encryptText(String publicKey, String originalText) throws Exception {if (StringUtil.isNullOrEmpty(publicKey)) {throw new Exception("密钥不能为空...");}if (StringUtil.isNullOrEmpty(originalText)) {throw new Exception("明文不能为空...");}try {return Sm2.doEncrypt(originalText, publicKey);//HexUtil.encodeHexStr(cipherText); // 加密结果} catch (Exception e) {throw new Exception("加密错误:密钥不正确...");}}public static String getPublicKey() {return publicKeyStr;}public static String getPrivateKey() {return privateKeyStr;}public static SmKeyPair smKeyPair() {return smKeyPair;}/*** 解密,使用私钥** @param privateKey* @param cipherText* @return*/public static String decryptText(String privateKey, String cipherText) throws Exception {if (StringUtil.isNullOrEmpty(privateKey)) {throw new Exception("密钥不能为空...");}if (StringUtil.isNullOrEmpty(cipherText)) {throw new Exception("明文不能为空...");}try {String s = Sm2.doDecrypt(cipherText, privateKey);System.out.println(s);return Sm2.doDecrypt(cipherText, privateKey); // new String(sm2.decrypt(sourceData,prvKey)); // 解密结果} catch (Exception e) {throw new Exception("解密错误:密钥不正确...");}}/*** 获取sm2密钥对,** @return 返回String[];第0个为公钥,第1个为私钥* @throws Exception*/public static String[] generateKeyPair() throws Exception {try {Keypair keypair = Sm2.generateKeyPairHex();String[] result = new String[2];if (keypair != null) {result[0] = keypair.getPublicKey(); //公钥smKeyPair.setPublicKey(keypair.getPublicKey());publicKeyStr = keypair.getPublicKey();result[1] = keypair.getPrivateKey(); // 私钥smKeyPair.setPrivateKey(keypair.getPrivateKey());privateKeyStr = keypair.getPrivateKey();}return result;} catch (Exception e) {throw new Exception("生成密钥对失败...");}}public static void main(String[] args) throws Exception {
//		生成一对 公钥与私钥String[] keys = generateKeyPair();
//		公钥String publicKey = keys[0];
//		String publicKey = publicKeyStr;System.out.println("公钥" + publicKey);
//		私钥String privateKey = privateKeyStr;System.out.println("私钥" + privateKey);//		String str = "测试使用SM2加密、解密";String str = "166ed3fc69afcfee4f1ba2034c36dac93d86dcad176219407776100130a506d9";try {//加密字符串String encryptText = SM2Encryptor.encryptText(publicKey, str);System.out.println(encryptText);} catch (Exception e) {}//解密字符串String decryptText = "null";try {decryptText = SM2Encryptor.decryptText("", str);System.out.println("成功解密后为:"+decryptText);} catch (Exception e) {System.out.println("失败");}}public static void main11(String[] args) throws Exception {ArrayList<String> strings = new ArrayList<>();String str = ("$2a$10$0OXfRm8Jc4XdRFHeXFovB.UKX2DjLfgPYYS/6mz7KSym87LazK.6a,$2a$10$0OXfRm8Jc4XdRFHeXFovB.UKX2DjLfgPYYS/6mz7KSym87LazK.6a,$2a$10$0OXfRm8Jc4XdRFHeXFovB.UKX2DjLfgPYYS/6mz7KSym87LazK.6a,$2a$10$nByAilbqXIko9uf/hj5VKOXiHYlW0e7x0HDDrqLuc/BtYantNFe2u,$2a$10$4O5pYOYvPZPbZNiP5Pn2BeiMD7hTiZi4cenk6heyKFx12E2IMqlTG,$2a$10$obSpw9ZU.el9F06cVudY4us4xqcW7M2gsdU2QrfmMmfqhyOjWzGc6,$2a$10$rKXmSKy9WLhOE5fY2HdL0.OcEWWzmP2yfmCMfGlMRTZl/mC2JOIVi,$2a$10$VUQ2jwnZftQM063Ln5icce2BFmbiWLn.PiYdg7VrrH64SOiiux8zC,"+"$2a$10$XnLqxv.CrFadLsdVvhW95.BViBnV3eOWSUshugmnBKPUob2XHm.xy,$2a$10$dUSnoJ5bXAii8CxGE1IcVOQxReiNXi0U2Cpl59lBefAruaIfrs88y,2a$10$xhHW7ERYY/Hw3IwL01u0P.8eLzdWNmagMikN/2WGtfrIdCOR.QLVa,$2a$10$W0bxfRzFzCtZcaLIqDWPQeIjIy/IaFXLbd3C6Ex6IE94JAhkPH7Jm,$2a$10$z1v1aRBeUE0XwASZXbjURO685AWBM008iL1BQpdFTccvXvg1h1uxe,$2a$10$WjoOi6vBZejpENmiXBFKZeJHPxF9i4Xtc0q2qObrdRS5fQ7tjWJeK,$2a$10$YbwwDYokkeVAkiKvdsUeveYirXfDZ50cxwWcX7RY7Wq97WBaJHdzK,$2a$10$gBUTW.okA8122Uxz5d7opu/nHSY7ketS1m8OkIXsr/7yYmkv8Fpru,$2a$10$9w/CwxYzdAWtczRP0AhIW.HLZSnWjPYSqyUDsbtW0Prg7doVuG9se,$2a$10$BNNKWdbm4D0.x77SDV/ME.kVjN78bfiBuC9UFf7fmWwLWIX4CLwsq,$2a$10$lzRWuhQKCiD5gK2waXYdEOD.YvjX1d/cbwOXJNtjajNxMCNvOUMGa,$2a$10$wE2i08bEY/x84R/IRAqPoeJyc2EuDrH84tNzesoFhr18qc.3cpXLG,$2a$10$fd/LEGgdfWe6JchTJP2G1ukwOY5chU3Gc4AyTujknzqcA6lnpryq.,$2a$10$nao.cM1CCRxjAcabg16fmunEhZJJQUQvOAreUOTrXIzosuQfwUgcq,"+"$2a$10$rb1lodozm6F2O1HZOwDbLus89XhJDW5sBbZIsi9Dt/PPPETvpo.Oe,$2a$10$hyyW3XZd6QrgYRWPbQVXxeouO2Onipjexlvuxp2kTh6h3RdLnREXS,$2a$10$9xEXMdd6t5JDyHmf5b2JZOgswBvoifkJHw.d6lk/pXH7rQ1vTRPwq,$2a$10$BNlXJqjRQ08lHoh1mAYfleQYJ7KHjRw9VKJq7IZeYwILpjurWlWA6,$2a$10$.5zW9ORnRQsS6OtjsfQmauprEj7z9EhB9YfSGN8qZMN9YJ3PaUEou,$2a$10$iX43ZtDY/8fyDiYjavXj1Oj6rj.2osBI3y.IfNkiXz5AV5rMfbT7K,$2a$10$FuCMGR.znZn7zGZNwYCa/.bKFPjBX.8Iq2blu7QtHfEf8Hu9IbkLu,$2a$10$wIbkN50SjpmsbxCXjuwcaOfq0EQ05YfxCTqNzrCUwVIROOvfo9D/.,"+"$2a$10$k1WDKOPXoEVu4p6mk8rTROUONXvZGEK8l0RO8NdNjVqnUvLaqEx9a,$2a$10$jlNUUjFiXACK70h4cHLRyuZ0Z1ldyeb167SrCU/OXwbSkkd2PbpMO,$2a$10$OyI36lNuUN1FlIrjaVW9KuESt/OxcKQ2GttQ378JL.stFxlb/hjdi,$2a$10$MaAGznguMJuWpFt.dHfywuEZ5QOr0YV0NDL.qbYN97uEX6pfZXwRi,$2a$10$D6ON3RwVT2frFZfaOA.nNuSBuMQmGY57/vnehKZfhXoztYCYhtyKK,$2a$10$YHpxrHMKC56vkyybaHfstuHGy9YOt2a828qP7VyWnAVOeY8o3SVYy,$2a$10$E.91z/MiLlOono1pwmzo2..Ka2Hf6pyr.uVQCYJYqrOZLnfe9BqLG,$2a$10$f02b1NTFiPBGWVwyMOyMw.g7xVq1hsegBpPdoi0afT17PqNrLOaba,"+"$2a$10$WS4zO1Odf0pa2S3SB0UDbObR5tVQWnql6XnXrnxSjGdasq24kx9VG,$2a$10$xPhPCcYIZO0UFJMnkl8ZW.30wgfc494IdUSKu6/DP3Z7GnqOxZ1By,$2a$10$.yLwueJ/xQueMcH3qa55eOBPjWJDB0oBLS3F3VGY8il8zvoft6EJu,$2a$10$Nx8pouYgkoBSCz86uEcvn.ExNQNaXIStSqB3fsNfbdP5Oj47zx4Ra,$2a$10$u3cFkCt2qgpYMMewjAuBm.C.FFvBjMSr0VaI6r1e8epInmvNpEbBy,$2a$10$vV7cPypCsNemcD9ZiQrNG.bUskbxKzzz73t4Fnq5UoRPQGtFSQePq,$2a$10$OKb.aK9Ofb/cEMHYvjWFwuu.CdFwby15ZdyetNwGUKxRMYLmZNk52,$2a$10$WarCwyP5JWp2Rrc4xC3CUex1FKRX4bY62fSj..tUd8PmlHxF8I82G,"+"$2a$10$y/JUE6C7NPnTuZjJWnMW1u7VRfeFbn18kB1HK1H1yT5cxQbJcvgIW,$2a$10$f1DBVIc1CQWVbZAY1zsk4OMS7ovVOPF8fzb9J4oUSpJ5tl5PLlOJe,$2a$10$OsgtQDRgQ0Qqnc0m/Oe3g.Fac6/6MmoFd7YIa38Jm8MiywlcvhrVG,$2a$10$2YkCgG9I6I/ihqW0mdzMKuSgntMiqfIN128ynjm/fJkMJCcaK7Ae.,$2a$10$tDKZGVoIk9bmsB8Zta4DweuPSG4gwzNHG5nqL/tONWqewKSmVPrYW,$2a$10$zHMR6OOPfE8oVVpdWIWANOIVPT75n1FhPknmRVloVmzyotH5G0JD.,$2a$10$AbbSKDa9HFL5LHg1PRif.ukfiC90Ybp4dBrLL82xKj3Qc19N4S7I2,$2a$10$4KJULL05MP3ZPihFp3Myu.kDQORG7qFdv2MHJnef7FUfidChXNUjm,"+"$2a$10$bMoOo/2zkM6CUOghx6Onk.P2yfMmqzX849k.MxB8Nm5ezVia14yW.,$2a$10$5uFQ/Jo/TfEPM8MA9MGisu/0RnXZO7jhjp8ewt.luFjEUnIZrjnHm,$2a$10$TYx.EIPGoEZwkKIQY7rAr.Jy/AiKNHj1kdYOacy81YsEkHtnecXDW,$2a$10$hP/tWvd4rwZP3vFMrE5DTez.b09QP8VOVGHSudYIGO079FKaHis86,$2a$10$kLz0tAJV6X9nnpyR/Aeh3OPtzqA4cBtMLCCRg8nX7TRbpGei8YkX6,$2a$10$njtEzD8ByMxIhrsKLwkpW.Rjy/IigzxOdsmnUcJ0H91JenXufZ3zS,$2a$10$le42slw2CQuB/miKG7mwBOgjMuhV5/kKOatcH02rsn.i5TKFcgilm,$2a$10$kSgjpIQDX0cK7PVzuUwEtexvUFLtMrJto7fujg2GG40j0r5wHy3qa,"+"$2a$10$MaPwMPePfNeLxm0uHvGqSOv/n8GnFj2DADJptclHIA3QHvXLCnS46,$2a$10$WorTE9Pfwdo4NyN8U6yHFu.Fek7jzQwuYlJyN26T2XO3kjKCB9SlS,$2a$10$hlFqSYJfHRaT/xp9c2rBb.wrjkQ/xGZ0qjO.aBrmHJFDZqWzTtHda,$2a$10$uvpPJsnFS4llREzWF28o7eOJk0LW8RwACfINCG1dgG/RaePpdRC0S,$2a$10$8JRFUion6Ti73uMM.vs1QeMB.IbB1BZlwiGM0yIk2UWdgkovx6yBK,$2a$10$TQXkcaewixOK3l14vLUxg.HLYK5eJshvBKptE9D8pXiuhw5d/Z6du,$2a$10$N1xgnv.hEYUliyfXgLdeNe3gu206P3jP.jB5OqDFFhxAMS.p6Je9i,$2a$10$EBoY8MP2rSCKi4Rsx28PTOUzwItMFTfnNaCqy5JxBtYOt024ZpWLa,"+"$2a$10$yV16ItAE/QnTmk58Bqybl.5GyGs1lODq/eXzSNzFzYNQF67QU2UqC,$2a$10$pfUsqj2DbJh95X0Dfx/j6Oe1KVNnaHg.JJDnzG49ALuhI5nbH81wW,$2a$10$IxlPhjKsfrOTfoFkY4EXqOUUrsA3HFMwi88T/CgpTOaqJTZHTzPEy,$2a$10$Mo5PVL7q6IZZx5mjdQVWquZjj8tCYAtT/WvOi3Dh5uCLOsSmY5Oxi,$2a$10$bF9l.0MqIFP8nND.Bnew/OO1C1A1HzC5H/zH8pMEbGKz.StTl2UMG,$2a$10$0fOx2IGytasxA9A4bZHcm.FxV4vXRXEggQOzFQ9H9ZvRoRlN08wby,$2a$10$afmUV4Ea98i7M46C67sVS.EgAO4q3bociwUXrg.MryBbGvTyk1rdO,$2a$10$BaydepEWPGWKHpztcy0X9.MT3JT9N8ok3qMYniSyDTb70UitqCACi,"+"$2a$10$rm8ACuVu/L5WrGIx6GQzmOCe5jIeFWqMea4PK7LiIY9y3lA6V2mue,$2a$10$g78j/vHGwDbJ6owQyLAVX.aZltVX7tiLkPUX74B2o2MSfdEHfD8Je,$2a$10$WlsChXQbTsXH0Ixfzquif.nwvym91K0nAemBEyudvfzVQAefE/.5a,$2a$10$B1QKr/6AYWbW6LP7zn.IIOCkSw/KGPr4FLtfPU0c0eplDvO88uF8m,$2a$10$u7nf2JtZVSwaRsmrpL/0iOmUrv3C7rKr9ZgCUe4tYF/qshtnwgR2a,$2a$10$vhQWireOCR4WF24XTXOoQuKSlFg8B9WmOSb3iFXmU50MAf1Qjmj7i,$2a$10$56cj/0IFOJi7cBPY3GgepuQA/VC98PjJtprYA8YBIkg7WDvd3K5Da,$2a$10$IePmIGZ4WcQGBeR.9vsqgu0UcnP/lPgApJ8uReJBAzImuk3wL1wUC,"+"$2a$10$is6Qwxc1/yKJrOITuf4z4.IGgLOJIFovpZhvGd91dfrsdoSs28LlO,$2a$10$SnDCCzlrIqT7oTAZ5KUnB.2ODLSBg4UUDpJ5tbhnflMH1ZcXF/.46,$2a$10$q97bqc579DEFSU8.9ka0ruuCkCQ2qybDvFdt5xsYgokxpldpSqIGu,$2a$10$8CVy5hN8ztP80p/5i9BYq.7ev5q9NNun1JG8P/re3wglgvcIG.MuG,$2a$10$0mud1YlzY.l5rxHkV16Veu3Qtw3Dbfc9MC9AqSSyS5c7X5orTGGdC,$2a$10$E2NhAxELYXJZQvwtEjhh5Of/tLKlhy7NCAtjacxQXfE1totdK2TUm,$2a$10$CghuySHeWIzrmzsYq2Q.HeLItIK5SeAoaLTC6sThidNtAk50BVbCC,$2a$10$gAa8lhKJpiK5KFMWgH7VCuioNsys/8EEsFOOzw.0G.O1jEbsoNyCC,"+"$2a$10$LpBends9aroD4uZOR0UB9.u7HROrFRtHOj5DbnCiUD3bT49HJTovK,$2a$10$SePADrelDadID7JmXqyfC.a0oaj0cScph6oXXamodOZdr//dnZSje,$2a$10$ghijJFE5V7uGzoQ6Yrq0Ce6CC.Yj8v.onKr9yuxdHYZcGx2rXzWTK,$2a$10$9NV3bUgsS4c.RHcwnF6OVOd7w1u.sa0X4vQkDq1J9.pPT5o8AWbx6,$2a$10$vH5cEESBaZWgOBf3GQsMHuW8LbtFH.7hvYNYYWsAOBad353uz8FhG,$2a$10$L7T0X60X.Bme0HOx.xR4s.BfRCzMEBinj2lfL8UXgZWNvDM2TnUh6,$2a$10$PkxOj4JHd53OCttbQPZofuLfRkyWno7hGQfKw1.hBy3jD0gUisJgm,$2a$10$B8.QnBNqITn1uT4nydWuneM9X.mqKYCPSxohR/7SF.S1X3b/XWYLa,"+"$2a$10$nnK/wOCVzZTwU2ZrYVoNdOuhyWm/vDiqNJn.vTkVEFu137HOQagu.,$2a$10$wuFgwwNS9DDnj1vi.iq94up3KStQFUs7pN2gO/ndI6ERMbdeAa2sm,$2a$10$I6HqOxQe7YCZ5Icmva3jw.h3KGw9B6N9Uo6Tcg0r62bHKg6xWYKO6,$2a$10$yRn6PaFnHoujIgXqfEJcHepvXvEN0m5Qa.19RNV28H7IwzOt4Hhxu,$2a$10$ucs4zz9jCSzyDEA0LJqrX.RosuU1sPuSvBiM1IPL1nsX5V59it0Au,$2a$10$7YFVsVTqykrSXVu3bPl1S.uoj2onQwi21eVt6mZY3Y/dVpxTEgoLW,$2a$10$hNcAC5qMNTTxz.vH1nZLP.T4S9sPNTuG0KgDX1hylcMrMpaEfwRZ2,$2a$10$kupfow5/FMa7LNSaLoKM5.d5zU0icKtKSH8WHx30irK3G.C3pLyee,"+"$2a$10$N6xPqq44DmnBlWbJgiMNye/Fzm3.yxYwXIDBeALhBZNN1.xonwMdG,$2a$10$pYPzdyOaDBlOUd1PcGZDJeK5dtE35j4qNgJVHdCYPpxctmZ56Jrum,$2a$10$jRU.o6rq0fe3mPqO/YDZiu/rWyZop4UPYjUf27EbEfTxX56e2eM82,$2a$10$.tZ6GCOI/EG1x5Z7scAauOgNkFduxJf94oVB0tyEGllcRXje6UX9u,$2a$10$uIg7q24d34w4qa81YnQjwuYVK25EJxgw6DPn0KiLVQQ04CNfqd.0u,$2a$10$Hl67tZsGzurSuq1aXOmTguu6QF46GURJuyJxGIHTRATxSMsNFtJ2W,$2a$10$Qo0gRZUYigjxwJ5KmhkRIOjBkttk3GM06drYv96ERpk53F9039FgC,$2a$10$a/g0xm854nvQAuh4Ko0PYuVo70zIGSuD1g5MVkMD2ciVXKDntwtj2,"+"$2a$10$RT5td108sIGzIY23M4X1weksRvuydT34d3N7duu1Cd6OZMh2agOt2,$2a$10$.qd.8zD81cBQOrnzhSgWUuLYAuft2M86hfsD6siHvVTCyL0MZwfQG,$2a$10$eYDWFSzBwhQssYhpJh1UK.XMndeQtW2uTbAb3TTU5SK8q0eCHiqYG,$2a$10$6PueANimU3hlXN8j3IKX..1zWPRVnI9y1sdR1d9C/cVYYK55.ZEgC,$2a$10$j7xKdgRPgu4XtFnfjDAkdObkEuSByemURcPOpz3NuG/W5oPVLQcOC,$2a$10$ZLVe.LAKVMW66f7rvYpcNu8BlJj6cxs2zST.bLFTIHCjz6GKhA7L.,$2a$10$aJYhOZNu.bZKu6wyHy5u6uUowAr2sY4NcSn/IpQexn9nemlVZBdfa,$2a$10$Q66gF1W1WYQuigYOaXtWT.Npoz4.0Zl.OJacjvE5bVrlbbKVJQjuW,$2a$10$mV4b7hq3gpJq7cwaiLUJ8OBnu1bOopWyeTuk8aCID6WzlaM3TuoEy,$2a$10$rkSIXEFmcmSOHs0eIc16Ous0gC83P3uIg9EV1vqkw3G9YysKKRof6,"+"$2a$10$LxyHFhCGKN85FYn4I3s/yeVxaEV4Q4zutHpQMiaYFTO/m.neAJ2eK,$2a$10$RmdiQrErmW4T1H91bARr3eOb/5EeJdGElP1VPKbplOKBi8VK1PZ1O,$2a$10$6Sc/VvEvcxhAIgH7kUY60.QlM4xU2eHKFxdxXBsQmMZzis4GY2buS,$2a$10$G9FBv5rBu/stjHXImxETgukeTIK2DC65x9m3Ogd91UR8/7L/WhX9W");String[] split = str.split(",");//私钥String privateKey = privateKeyStr;for (String s : split) {//解密字符串String decryptText = SM2Encryptor.decryptText(privateKey, s);System.out.println("解密后密码:"+decryptText);}}/*** 获取sm2密钥对,** @return 返回String[];第0个为公钥,第1个为私钥* @throws Exception*/
//	@Beanpublic void startGenerateKeyPair() throws Exception {try {Keypair keypair = Sm2.generateKeyPairHex();String[] result = new String[2];if (keypair != null) {result[0] = keypair.getPublicKey(); //公钥smKeyPair.setPublicKey(keypair.getPublicKey());publicKeyStr = keypair.getPublicKey();result[1] = keypair.getPrivateKey(); // 私钥smKeyPair.setPrivateKey(keypair.getPrivateKey());privateKeyStr = keypair.getPrivateKey();}} catch (Exception e) {throw new Exception("生成密钥对失败...");}}/*** RSA密钥对对象*/public static class SmKeyPair {private String publicKey;private String privateKey;public SmKeyPair() {}public SmKeyPair(String publicKey, String privateKey) {this.publicKey = publicKey;this.privateKey = privateKey;}public String getPublicKey() {return publicKey;}public void setPublicKey(String publicKey) {this.publicKey = publicKey;}public String getPrivateKey() {return privateKey;}public void setPrivateKey(String privateKey) {this.privateKey = privateKey;}}}

然后运行里面的main方法获取公钥和私钥,保存起来
在这里插入图片描述
在这里插入图片描述
然后再application.yml文件中加入一个配置:
在这里插入图片描述

#SM2解密私钥
SM_privateKey: 92b704fee9ac448ac27abfa537021ab42d0035151f01fdc03e49b0c2f5496148

最后在登录接口那里调用解密方法

/*** 登录方法* * @param loginBody 登录信息* @return 结果*/@PostMapping("/login")public AjaxResult login(@RequestBody LoginBody loginBody) throws Exception{AjaxResult ajax = AjaxResult.success();// 生成令牌String token = loginService.login(loginBody.getUsername(), SM2Encryptor.decryptText(SM_privateKey, loginBody.getPassword()), loginBody.getCode(),loginBody.getUuid());ajax.put(Constants.TOKEN, token);return ajax;}

在这里插入图片描述
到此后端的工作就做完了

前端

前段需要先

npm i sm-crypto

在需要生成的模块,如common模块下新建一个工具类
前端代码:
在utils下新建smcrypto.js,把公钥和私钥放进来

import { sm2 } from 'sm-crypto'const publicKey = "04b9fd451e0d0d5517069076edbc7dc83b3a885307bc8cf00185769f6818bcdf958f8dc4c8575f33dcfbe0bb18c4f651892a05a4fd923f01db2e3ad09fc4bf2878"
const privateKey = '92b704fee9ac448ac27abfa537021ab42d0035151f01fdc03e49b0c2f5496148'
const cipherMode=1// sm2公钥加密
export function smEncryptor(password) {password = sm2.doEncrypt(password, publicKey, cipherMode)return password
}// sm私钥解密
export function decrypt(txt) {return sm2.doDecrypt(txt, privateKey, cipherMode)
}

然后在登录的地方进行加密:

      const password = smEncryptor(userInfo.password)

在这里插入图片描述
最后就是测试效果
在这里插入图片描述

这篇关于若依基于sm-crypto实现前后端登录密码加密的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/601880

相关文章

Security OAuth2 单点登录流程

单点登录(英语:Single sign-on,缩写为 SSO),又译为单一签入,一种对于许多相互关连,但是又是各自独立的软件系统,提供访问控制的属性。当拥有这项属性时,当用户登录时,就可以获取所有系统的访问权限,不用对每个单一系统都逐一登录。这项功能通常是以轻型目录访问协议(LDAP)来实现,在服务器上会将用户信息存储到LDAP数据库中。相同的,单一注销(single sign-off)就是指

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略 1. 特权模式限制2. 宿主机资源隔离3. 用户和组管理4. 权限提升控制5. SELinux配置 💖The Begin💖点点关注,收藏不迷路💖 Kubernetes的PodSecurityPolicy(PSP)是一个关键的安全特性,它在Pod创建之前实施安全策略,确保P

工厂ERP管理系统实现源码(JAVA)

工厂进销存管理系统是一个集采购管理、仓库管理、生产管理和销售管理于一体的综合解决方案。该系统旨在帮助企业优化流程、提高效率、降低成本,并实时掌握各环节的运营状况。 在采购管理方面,系统能够处理采购订单、供应商管理和采购入库等流程,确保采购过程的透明和高效。仓库管理方面,实现库存的精准管理,包括入库、出库、盘点等操作,确保库存数据的准确性和实时性。 生产管理模块则涵盖了生产计划制定、物料需求计划、