前端引入jsencrypt.min.js
链接:https://blog.csdn.net/CYY941027/article/details/136248779
var encrypt = new JSEncrypt();encrypt.setPublicKey(key);//key为公钥,根据下一步操作生成公钥私钥,公钥放入前端加密使用var passwordrsa = encrypt.encrypt(password);
生成公钥私钥方法
public static void test() throws Exception {// 1.初始化秘钥KeyPairGenerator keyPairGenerator;try {keyPairGenerator = KeyPairGenerator.getInstance("RSA");// 随机数生成器SecureRandom sr = new SecureRandom();// 设置1024位长的秘钥keyPairGenerator.initialize(1024, sr);// 开始创建KeyPair keyPair = keyPairGenerator.generateKeyPair();//获取公钥RSAPublicKey rsaPublicKey = (RSAPublicKey) keyPair.getPublic();//获取私钥RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) keyPair.getPrivate();//对公钥进行编码String PUBLIC_KEY = Base64.encodeBase64String(rsaPublicKey.getEncoded());System.out.println("公钥=" + PUBLIC_KEY);//对私钥进行编码String PRIVATE_KEY = Base64.encodeBase64String(rsaPrivateKey.getEncoded());System.out.println("私钥=" + PRIVATE_KEY);} catch (NoSuchAlgorithmException e) {e.printStackTrace();}
}
后端解密
/*** RSA加密解密** @author ruoyi**/
public class RsaUtils {// Rsa 私钥public static String privateKey = "hQ+cPkoxt6y5NI9kVRtSLUyHpAXsBsw6cwbjveKDGdpv4CRbaulErzbgFkuqckToQyvybY83osdbD1KyMpIVWlvDOKrbtNBtbLQqv+7vBtKp6KJZ1HYwF1";/**解密前端参数*/public static void main(String[] args) throws Exception {String jm = decryptByPrivateKey(passwordrsa );}/*** 私钥解密** @param text 私钥* @param text 待解密的文本* @return 解密后的文本*/public static String decryptByPrivateKey(String text) throws Exception {return decryptByPrivateKey(privateKey, text);}/*** 公钥解密** @param publicKeyString 公钥* @param text 待解密的信息* @return 解密后的文本*/public static String decryptByPublicKey(String publicKeyString, String text) throws Exception {X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(Base64.decodeBase64(publicKeyString));KeyFactory keyFactory = KeyFactory.getInstance("RSA");PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);Cipher cipher = Cipher.getInstance("RSA");cipher.init(Cipher.DECRYPT_MODE, publicKey);byte[] result = cipher.doFinal(Base64.decodeBase64(text));return new String(result);}/*** 私钥加密** @param privateKeyString 私钥* @param text 待加密的信息* @return 加密后的文本*/public static String encryptByPrivateKey(String privateKeyString, String text) throws Exception {PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(Base64.decodeBase64(privateKeyString));KeyFactory keyFactory = KeyFactory.getInstance("RSA");PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);Cipher cipher = Cipher.getInstance("RSA");cipher.init(Cipher.ENCRYPT_MODE, privateKey);byte[] result = cipher.doFinal(text.getBytes());return Base64.encodeBase64String(result);}/*** 私钥解密** @param privateKeyString 私钥* @param text 待解密的文本* @return 解密后的文本*/public static String decryptByPrivateKey(String privateKeyString, String text) throws Exception {PKCS8EncodedKeySpec pkcs8EncodedKeySpec5 = new PKCS8EncodedKeySpec(Base64.decodeBase64(privateKeyString));KeyFactory keyFactory = KeyFactory.getInstance("RSA");PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec5);Cipher cipher = Cipher.getInstance("RSA");cipher.init(Cipher.DECRYPT_MODE, privateKey);byte[] result = cipher.doFinal(Base64.decodeBase64(text));return new String(result);}/*** 公钥加密** @param publicKeyString 公钥* @param text 待加密的文本* @return 加密后的文本*/public static String encryptByPublicKey(String publicKeyString, String text) throws Exception {X509EncodedKeySpec x509EncodedKeySpec2 = new X509EncodedKeySpec(Base64.decodeBase64(publicKeyString));KeyFactory keyFactory = KeyFactory.getInstance("RSA");PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec2);Cipher cipher = Cipher.getInstance("RSA");cipher.init(Cipher.ENCRYPT_MODE, publicKey);byte[] result = cipher.doFinal(text.getBytes());return Base64.encodeBase64String(result);}/*** 构建RSA密钥对** @return 生成后的公私钥信息*/public static RsaKeyPair generateKeyPair() throws NoSuchAlgorithmException {KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");keyPairGenerator.initialize(1024);KeyPair keyPair = keyPairGenerator.generateKeyPair();RSAPublicKey rsaPublicKey = (RSAPublicKey) keyPair.getPublic();RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) keyPair.getPrivate();String publicKeyString = Base64.encodeBase64String(rsaPublicKey.getEncoded());String privateKeyString = Base64.encodeBase64String(rsaPrivateKey.getEncoded());return new RsaKeyPair(publicKeyString, privateKeyString);}/*** RSA密钥对对象*/public static class RsaKeyPair {private final String publicKey;private final String privateKey;public RsaKeyPair(String publicKey, String privateKey) {this.publicKey = publicKey;this.privateKey = privateKey;}public String getPublicKey() {return publicKey;}public String getPrivateKey() {return privateKey;}}
}