Solution ideas, front-end js encryption, controller layer decryption
1. Front-end encryption
Introduce js (jsencrypt.min.js) personal backup js
function login() { $.modal.loading($("#btnSubmit").data("loading")); var username = $("input[name='username']").val().trim(); var password = $("input[name='password']").val().trim(); var validateCode = $("input[name='validateCode']").val(); var rememberMe = $("input[name='rememberme']").is(':checked'); $.ajax({ type: "post", url: ctx + "login", data: { "username": username, "password": getP(password), "validateCode" : validateCode, "rememberMe": rememberMe }, success: function(r) { . . . . . . . . . . . . . . . Omit
function getP(pw){<!-- --><br> var encrypt = new JSEncrypt();<br> encrypt.setPublicKey("-----BEGIN PUBLIC KEY-----MIIBITANBgkqhkiG9w0BAQEFAAOCAQ4AMIIBCQKCAQBdGLuF0cP1mE8cuK24mp7qi5sSmNVSB0qdJiiw6jzkU + iH1 + bVJmFbuiAmYG/VOym6ZDftCy2R4oJvkP 7MgS1nsxBRdnb0eAU/abVy1Wk2y1d6ZsiF35Shpy235WfkIVc9cRX71LpNxetfMiFAJSqSZ2XbNJTBWZEah/r0rBgRSAkC6NbFsgdWi6VbPGDVM + Y2pM8wQjrUi3ZCTE9SSchv/grbl/OJm/T5ua YP0VqoOV0Zzi89bqjby9XexInyCj + 1hxy7 + 9NP1brx5qHRAuiidbtqHzVOyKpsKGPh2fJugbVhzUoqM6ebL/j1y8w92obMj3snsgykqj5T2kfSiiMxAgMBAAE=----- END PUBLIC KEY-----");<br> var encryted = encrypt.encrypt(pw);<br> return encryted;<br>}<br><br>The public key here can be placed at the end of jsencrypt.min.js and then retrieved here. I will write it directly here
Controller layer decryption code
@PostMapping("/login")<br>@ResponseBody<br>public AjaxResult ajaxLogin(String username, String password, Boolean rememberMe)<br>{<!-- --><br> String repassword = "";<br> //System.out.println("before decryption" + password);<br><br> //Decrypt the passed password value<br> try {<!-- --><br> repassword = RSAUtil.decrypt(password,RSAUtil.PRIVATE_KEY);<br> //System.out.println("After decryption" + repassword);<br> } catch (Exception e) {<!-- --><br> e.printStackTrace();<br> return error("Illegal login");<br> }<br> UsernamePasswordToken token = new UsernamePasswordToken(username, repassword, rememberMe);<br> Subject subject = SecurityUtils.getSubject();<br> try{<!-- --><br> subject.login(token);<br> return success();<br> }<br> catch (AuthenticationException e)<br> {<!-- --><br> String msg = "Wrong user or password";<br> if (StringUtils.isNotEmpty(e.getMessage()))<br> {<!-- --><br> msg = e.getMessage();<br> }<br> return error(msg);<br> }<br>}
Tool class SHAUtil
package com.ruoyi.common.utils;<br><br>import org.apache.commons.codec.binary.Base64;<br><br>import javax.crypto.Cipher;<br>import java.security.*;<br>import java.security.interfaces.RSAPrivateKey;<br>import java.security.interfaces.RSAPublicKey;<br>import java.security.spec.PKCS8EncodedKeySpec;<br>import java.security.spec.X509EncodedKeySpec;<br>import java.util.HashMap;<br>import java.util.Map;<br><br>public class RSAUtil {<!-- --><br> //public static String PRIVATE_KEY="MIIEoQIBAAMMMMMMMMMMMMMMMMFbuiAmYG/VOym6ZDftCy2R4oJvkP7MgS1nsxBRdnb0eAU/abVy1Wk2y1d6ZsiF35Shpy235WfkIVc9cRX71LpNxetfMiFAJSqSZ2XbNJTBWZEah/r 0rBgRSAkC6NbFsgdWi6VbPGDVM + Y2pM8wQjrUi3ZCTE9SSchv/grbl/OJm/T5uaYP0VqoOV0Zzi89bqjby9XexInyCj + 1hxy7 + 9NP1brx5qHRAuiidbtqHzVOyKpsKGPh2fJugbVhzUoqM6ebL/j 1y8w92obMj3snsgykqj5T2kfSiiMxAgMBAAECggEALujqfMixJEyl + IP6TV3kG61S63EFdHrmFv + GW3b8TdUWA3VABEF9p1nHH29SirBwG1Kqd5A9Wxg2v37hVSz2Mx2gaFv4HsFna4eZfY6ZoJ mfr7ag7gw1 + aqit9opmmNOcVBNUoLjiZLkQiihZpATvofJZEY/epnmKudABg + 9ZN86vnbA2DFnYmVLbZvWwhGyr7AnvDO + 678PtpIaWL4yxRA + p + 6CxQd5ZkQf8E6VGeU4qSmbksjN + fav1 SwDm4hGSBvHP6r2dWZ7MITg4DomavOwCJseh9AVX9LUtygumjY/NdYoUXkyoSeniQwL /uMd1ewB9Qi8jrJj9NAxUbsXDQKBgQCe2zRMi + R5u35FL2jWs/gAgT7KQ8d0vlv/eAOD2filiEGRoTgdzAXuGY0vytICf11HZ/y0qhPuiDuNIOnvIa9kj2zHawVBbm6Fl6J6GP874V894B h3J3oWn9ilMIfEjvM4Jlg6aKPiht1EiykLgvIim4qaFj8UTBMMkaqUZJjw6wKBgQCWBurdYj59dZ6XOlYZTDNjJriTm4MdOZrvxAOnYIdvtDcVhqWNcocR0OXYilwehLxnsbExbE3En4OmUb ZZe2pOvQ96OojUQHP4vwFUD3dm6gS87yT9nwDkMFgNETVbxVUI2SYsmtPnI8NgkkSiJfbj3Jlfe4ZCu4gwWJfD2WJVUwKBgDZW4XL1v3fsrOrZptEaytDRZTsnKElE/I9M7Fbj7uwgy d0Y + usmaTjjQKqChIgaLTxJ0 + Ww8BR + QXCrO5pzOV36uckVULzrG59TGV8OwfAnzb6Ks5O + y0KF90O6cBbKl2QzqaaBON46J + JUf/vSFSXFcwn2Zil5RGLeSS1to + t1AoGAcq6NAHfmDt9HQJ C+Wg4uxd9GfscEneV380oiBOM8BH59EP5hNNPUPiEyYam6KzYKEzX4njAM7n2FFDEoNBSsOc45s5RlHeK7A+12JXzBKDFBN++SljDibIwr8qkx4Znhm6bqkHQ2AV0ML5j/z/c3WA08TInPItnZjCNct 8BHc7MCgYAsV4y3/CtQEmxk3wQr8ng/4LZtHuXdojh8ZQ74b3gQqO/iml6XdzZJRN/fmO + ikDAY6jPQAW4RsqZ1l8W1pKbzCvuTW6jGoUyti + Lrt3HDF9SlZMHk4gc/ tq1/ad4lIgHbCxBJv7UvP6YDQX + 7itJmpmYmhTuYuJ11ZnAZg9qCQg==";<br> public static String PRIVATE_KEY="MIIEuwNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNgEAAoIBAF0Yu4XRw/WYTxy4rbianuqLmxKY1VIHSp0mKLDqPORT6IfX5tUmYVu6ICZgb9U7KbpkN + 0LLZHigm + Q/syBLWezEFF2dvR4BT9ptXLVaT bLV3pmyIXflKGnLbflZ + QhVz1xFfvUuk3F618yIUAlKpJnZds0lMFZkRqH + vSsGBFICQLo1sWyB1aLpVs8YNUz5jakzzBCOtSLdkJMT1JJyG/ + CtuX84mb9Pm5pg/RWqg5XRnOLz1uqNvL1 d7EifIKP7WHHLv700/VuvHmodEC6KJ1u2ofNU7IqmwoY + HZ8m6BtWHNSiozp5sv + PXLzD3ahsyPeyeyDKSqPlPaR9KKIzECAwEAAQKCAQAu6Op8yLEkTKX4g/pNXeQbrVLrcQV0euYW/4ZbdvxN1RYDdUAEQX 2nWccfb1KKsHAbUqp3kD1bGDa/fuFVLPYzHaBoW/gewWdrh5l9jpmgmZ + vtqDuDDX5qqK32imaY05xUE1SguOJkuRCKKFmkBO + h8lkRj96meYq50AGD71k3zq + dsDYMWdiZUttm9bCEbKvsCe8M77r vw + 2khpYvjLFED6n7oLFB3lmRB/wTpUZ5TipKZuSyM359q/ VLAObiEZIG8c/qvZ1ZnswhODgOiZq87AImx6H0BVf0tS3KC6aNj811ihReTKhJ6eJDAv + 4x3V7AH1CLyOsmP00DFRuxcNAoGBAJ7bNEyL5Hm7fkUvaNaz + ACBPspDx3S + W/94A4PZ + KWIQ ZGhOB3MBe4ZjS/K0gJ/XUdn/LSqE + 6IO40g6e8hr2SPbMdrBUFuboWXonoY/zvhXz3gGHcnehaf2KUwh8SO8zgmWDpoo + KG3USLKQuC8iKbipoWPxRMEwyRqpRkmPDrAoGBAJYG6t1iPn11npc6VhlMM2M muJObgx05mu/EA6dgh2 + 0NxWGpY1yhxHQ5diKXB6EvGexsTFsTcSfg6ZRtll7ak69D3o6iNRAc/i/AVQPd2bqBLzvJP2fAOQwWA0RNVvFVQjZJiya0 + cjw2CSRKIl9uPcmV97hkK7iDBYl8P ZYlVTAoGANlbhcvW/d + ys6tmm0RrK0NFlOycoSUT8j0zsVuPu7CDJ3Rj66yZpOONAqoKEiBotPEnT5bDwFH5BcKs7mnM5Xfq5yRVQvOsbn1MZXw7B8CfNvoqzk77LQoX3Q7pwFsqXZ DOppoE43jon4lR/ + 9IVJcVzCfZmKXlEYt5JLW2j63UCgYByro0Ad + YO30dAkL5aDi7F30Z + xwSd5XfzSiIE4zwEfn0Q/mE009Q + ITJhqborNgoTNfieMAzufYUUMSg0FKw5zjmzlGUd4rsD7X YlfMEoMUE375KWMOJsjCvyqTHhmeGbpuqQdDYBXQwvmP /P9zdYDTxMic8i2dmMI1y3wEdzswKBgCxXjLf8K1ASbGTfBCvyeD/gtm0e5d2iOHxlDvhveBCo7 + KaXpd3NklE39 + Y76KQMBjqM9ABbhGypnWXxbWkpvMK + 5NbqMahTK2L4uu3ccMX 1KVkweTiBz + 2rX9p3iUiAdsLEEm/tS8/pgNBf7uK0mamZiaFO5i4nXVmcBmD2oJC";<br> public static String PUBLIC_KEY="MIIBITANBgkqhkiKKKKKKKKKKKKKKKKKKKKKKKKKKKKKi5sSmNVSB0qdJiiw6jzkU + iH1 + bVJmFbuiAmYG/VOym6ZDftCy2R4oJvkP7MgS1nsxBRdnb0eAU/abVy1Wk2y1d6ZsiF35Sh py235WfkIVc9cRX71LpNxetfMiFAJSqSZ2XbNJTBWZEah/r0rBgRSAkC6NbFsgdWi6VbPGDVM + Y2pM8wQjrUi3ZCTE9SSchv/grbl/OJm/T5uaYP0VqoOV0Zzi89bqjby9XexInyCj + 1hxy7 + 9NP1brx5qHRAuiidbtqHzVOyKpsKGPh2fJugbVhzUoqM6ebL/j1y8w92obMj3snsgykqj5T2kfSiiMxAgMBAAE=";<br> private static Map<Integer, String> keyMap = new HashMap<Integer, String>(); //Used to encapsulate randomly generated public and private keys<br>/* public static void main(String[] args) throws Exception {<!-- --><br> //Generate public and private keys<br> genKeyPair();<br> //encrypt string<br> String message = "testmsg";<br> System.out.println("The randomly generated public key is:" + keyMap.get(0));<br> System.out.println("The randomly generated private key is:" + keyMap.get(1));<br> String messageEn = encrypt(message,keyMap.get(0));<br> System.out.println("Plain text:" + message);<br> System.out.println("The encrypted string is:" + messageEn);<br> String messageDe = decrypt(messageEn,keyMap.get(1));<br> System.out.println("The restored string is:" + messageDe);<br> }*/<br><br> /**<br> * Randomly generate key pair<br> * @throws NoSuchAlgorithmException<br> */<br> public static void genKeyPair() throws NoSuchAlgorithmException {<!-- --><br> // The KeyPairGenerator class is used to generate public and private key pairs and generate objects based on the RSA algorithm.<br> KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");<br> // Initialize the key pair generator, the key size is 96-1024 bits<br> keyPairGen.initialize(1024,new SecureRandom());<br> // Generate a key pair and save it in keyPair<br> KeyPair keyPair = keyPairGen.generateKeyPair();<br> RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate(); // Get the private key<br> RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic(); // Get the public key<br> String publicKeyString = new String(Base64.encodeBase64(publicKey.getEncoded()));<br> // Get the private key string<br> String privateKeyString = new String(Base64.encodeBase64((privateKey.getEncoded())));<br> //Save the public key and private key to Map<br> keyMap.put(0,publicKeyString); //0 represents the public key<br> keyMap.put(1,privateKeyString); //1 represents the private key<br> }<br> /**<br> * RSA public key encryption<br> *<br> * @param str<br> * Encrypted string<br> * @param publicKey<br> * Public key<br> * @return ciphertext<br> * @throwsException<br> * Abnormal information during encryption process<br> */<br> public static String encrypt( String str, String publicKey ) throws Exception{<!-- --><br> //base64 encoded public key<br> byte[] decoded = Base64.decodeBase64(publicKey);<br> RSAPublicKey pubKey = (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(decoded));<br> //RSA encryption<br> Cipher cipher = Cipher.getInstance("RSA");<br> cipher.init(Cipher.ENCRYPT_MODE, pubKey);<br> String outStr = Base64.encodeBase64String(cipher.doFinal(str.getBytes("UTF-8")));<br> return outStr;<br> }<br><br> /**<br> * RSA private key decryption<br> *<br> * @param str<br> * Encrypted string<br> * @param privateKey<br> *Private key<br> * @return inscription<br> * @throwsException<br> * Abnormal information during decryption process<br> */<br> public static String decrypt(String str, String privateKey) throws Exception{<!-- --><br> //64-bit decoded encrypted string<br> byte[] inputByte = Base64.decodeBase64(str.getBytes("UTF-8"));<br> //base64 encoded private key<br> byte[] decoded = Base64.decodeBase64(privateKey);<br> RSAPrivateKey priKey = (RSAPrivateKey) KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(decoded));<br> //RSA decryption<br> Cipher cipher = Cipher.getInstance("RSA");<br> cipher.init(Cipher.DECRYPT_MODE, priKey);<br> String outStr = new String(cipher.doFinal(inputByte));<br> return outStr;<br> }<br>}<br><br>
Public key and private key generation address
https://www.bm8.com.cn/webtool/rsa/
The generated key needs to be formatted
Convert key format to pksc8
http://tool.chacuo.net/cryptrsapkcs1pkcs8