资源
RSA,RSA2公钥私钥加密解密
支付宝在线加密:强烈推荐不报错!
初始配置
1、阿里文档
下载工具包:
2、进行安装后点击生成秘钥即可
一、vue项目使用
引入
npm install jsencrypt
import JSEncrypt from 'jsencrypt/bin/jsencrypt.min' // 密钥对生成 http://web.chacuo.net/netrsakeypair const publicKey = 'MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKoR8mX0rGKLqzcWmOzbfj64K8ZIgOdH\n' + 'nzkXSOVOZbFu/TJhZ7rFAN+eaGkl3C4buccQd/EjEsj9ir7ijT7h96MCAwEAAQ==' const privateKey = 'MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAqhHyZfSsYourNxaY\n' + '7Nt+PrgrxkiA50efORdI5U5lsW79MmFnusUA355oaSXcLhu5xxB38SMSyP2KvuKN\n' + 'PuH3owIDAQABAkAfoiLyL+Z4lf4Myxk6xUDgLaWGximj20CUf+5BKKnlrK+Ed8gA\n' + 'kM0HqoTt2UZwA5E2MzS4EI2gjfQhz5X28uqxAiEA3wNFxfrCZlSZHb0gn2zDpWow\n' + 'cSxQAgiCstxGUoOqlW8CIQDDOerGKH5OmCJ4Z21v+F25WaHYPxCFMvwxpcw99Ecv\n' + 'DQIgIdhDTIqD2jfYjPTY8Jj3EDGPbH2HHuffvflECt3Ek60CIQCFRlCkHpi7hthh\n' + 'YhovyloRYsM+IS9h/0BzlEAuO0ktMQIgSPT3aFAgJYwKpqRYKlLDVcflZFCKY7u3\n' + 'UP8iWi1Qw0Y=' // 加密 export function encrypt(txt) { const encryptor = new JSEncrypt() encryptor.setPublicKey(publicKey) // 设置公钥 return encryptor.encrypt(txt) // 对数据进行加密 } // 解密 export function decrypt(txt) { const encryptor = new JSEncrypt() encryptor.setPrivateKey(privateKey) // 设置私钥 return encryptor.decrypt(txt) // 对数据进行解密 }
使用
import { encrypt, decrypt } from '@/utils/jsencrypt.js' test () { console.log('密码:123456') const num = encrypt('123456') console.log('加密后:' + num) console.log('解密后:' + decrypt(num)) },
二、Springboot集成
完整方法工具类
测试:
public static void main(String[] args) throws Exception { String jiami = "bZEWt/ZCs6A7WoeopCnUs7t/SEoxvF+UH4UZhZm8BzjAjZ2HFHThfu/H9G9BdktIowHXo8mQqS1n08kslgqY7aKwxyg88xZXsJ9BOY5MUAnkbQAG3luejMp4B3Eoz+nL8hMrmrh4yUyRFRIsz7/EGuIkeKLzhq9bwOQ2aZ4LgMh7/hETbQuDtF10aKMcPbwrB/8NCSaoGsQGXEUtUjJxARFXGnrtH2dP4GDfth9rtyJMfpRqXTFyhQMpXrubcI7FmyZonoHQlCPJ+2z2E8XzaQOo3H5YLBb/CVvr2JEFbCuWkvyB+dNVvRS/dYiacrd26UAO9VhzdiOuNc3ePJT4TA=="; System.out.println(decryptByPrivateKey(jiami)); }
完整工具类:
package com.zhifeng.common.Utils; import org.apache.commons.codec.binary.Base64; import javax.crypto.Cipher; import java.security.*; import java.security.interfaces.RSAPrivateKey; import java.security.interfaces.RSAPublicKey; import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.X509EncodedKeySpec; /** * @ClassName RsaUtils * @Author ChangLu * @Date 2021/11/29 20:05 * @Description TODO */ public class RsaUtils { private static String publicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmeDbWj1Kh7ndniKQmAa8i9rbSTkANguoHIwDPj5Wt5E1iX6x87E53T0z4FDb5/Fcuo8TR2zdUQZvG3TxF4KXgeJ+jNBZOgnJ/6iSjjo4D/xRFzED3xxgtmLJVJSNhvktT35p9J9rGLdscX61/Dr5DI5Fei6PmrhcEcJn7QyoHeC2LPclL7O5cyibyM6at5Ottnp6enAxIzH5PGGErFUOb1oC6RfWDu1dIjBVs4Jem4pSKTeDtwb7WkdtnBSHmWG71P5j3xPkjcu1DrFAfYzcrm16YxmFqdw8D4KrPq95iPAUFKFAame4QgYHYf++xFiYa6XAKlFAiJHZjUQrV3mISQIDAQAB"; private static String privateKey = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCZ4NtaPUqHud2eIpCYBryL2ttJOQA2C6gcjAM+Pla3kTWJfrHzsTndPTPgUNvn8Vy6jxNHbN1RBm8bdPEXgpeB4n6M0Fk6Ccn/qJKOOjgP/FEXMQPfHGC2YslUlI2G+S1Pfmn0n2sYt2xxfrX8OvkMjkV6Lo+auFwRwmftDKgd4LYs9yUvs7lzKJvIzpq3k622enp6cDEjMfk8YYSsVQ5vWgLpF9YO7V0iMFWzgl6bilIpN4O3BvtaR22cFIeZYbvU/mPfE+SNy7UOsUB9jNyubXpjGYWp3DwPgqs+r3mI8BQUoUBqZ7hCBgdh/77EWJhrpcAqUUCIkdmNRCtXeYhJAgMBAAECggEAPLmu9uqvKebgnZJYa5Zk+/Avj7Lt8WYiPrnGYd7qC+FDNnKIOXpcMoH/oetnDR6EEJ975TkCEgKvAC/jIPsJXVmLxXhHbg8E516YD4bMLwrM2ZEfTQH+7JsJhtZlD7nv9qoVmFL9SbDBG/z8RoDjXeAbbP9I7q8Irn2A09ylz7wMnyHl8grNyMf6eSerG/U1zM+LJ5s/tMv5D0Q7Y7fung/lD4lDyG39lXKymwxMNMLCzRavYiYA6Fe2fQ8baKGUVFoNNHJgHx6KmrxoXsPeMJgyO0Q+sCP0ZrPXbZLwQCm9itMFkpQ8xnwL+BSGNNr+Wrj2tK+TA+N4LFxd3u6iAQKBgQDIsHpNoXJheizOpQdcL619LT/MCXhD/rklLZzl4oV5qb/CfVEg3LqUF/h7c9RlsMvT+TpfSA+VEAoz+k8Igf45GAYkIIiDWAVfckMEnJISJfKVIN+ZYCUA8lhNa7SIgaxZnCbOczeEuOrfh0SWFxMsIdmFA7JUZm3nVebik/2dwQKBgQDESaeaGQCZuy5PVLbSAm1dAkrEOdnF4qQ5VbdcJLvKhQ98a5hFi9HmiFRrJIoUG2ePdiSr50RCZ7rgPhbvY+mkoXLalqsWmgIkitnggX0A/TJ2IDN4QZKuVWpJ2upBNCTCbuQiqg15etMXbAYEWKYHR2EjEl23HQm5lG7P1T8ciQKBgDraXhNz/AoP/SHgjYcASF1ELshUIpu2EG+Rr8hOpJvoJt8PRwJfGKwjV3BEqI3lyfBwzyhwBnnNSWCy0AiLrpTpsatYixAReQnjhTnN/Jwr2rbW/BuLcW6Uo0aZBkld1cA1pb+3VBms7Nv+XCOzwqCXkKWMTvinTSWhMGNTyPVBAoGAGAR3KIjUpPrdUMGp2QqI/S9xnI8DkY4I0Ccn13N7Mu2TFoNHz4KrPU0DH1UKPCmaQ1iOZiZXGNT+bb/LKKGODiHfHtX+uzY++t+uhyTw+bUBfqi0A4vqecBj0AOkVDQgJ1ZQPdmW6n1X5O7H0bJTJmLahOMTant4HCgIYw/RuBkCgYEAnWugBURLRAC3b7Sl4J3cAF7roJraWuqmi2iw9glf72BCuN19uvo7hBi8B1L8kKwcvpUIqISSLZfm6HQziRgxqwrDYdjUPJY/Y6ugEC0lRgOoAs22xOmW+AfQwGdXYKJf3Tp+hb9QmTDhngjyq9eU3SeL4kd11rC2veb8XyBUj6s="; /** * RSA密钥对对象 */ public static class RSAKeyPair { private String publicKey; private String privateKey; public RSAKeyPair(String publicKey, String privateKey) { this.publicKey = publicKey; this.privateKey = privateKey; } public String getPublicKey() { return publicKey; } public String getPrivateKey() { return privateKey; } } /** * 构建RSA密钥对 * * @return * @throws NoSuchAlgorithmException */ 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()); RSAKeyPair rsaKeyPair = new RSAKeyPair(publicKeyString, privateKeyString); return rsaKeyPair; } /** * 公钥加密 * * @param publicKeyText * @param text * @return */ public static String encryptByPublicKey(String publicKeyText, String text) throws Exception { X509EncodedKeySpec x509EncodedKeySpec2 = new X509EncodedKeySpec(Base64.decodeBase64(publicKeyText)); 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); } /** * 私钥解密 * * @param privateKeyText * @param text * @return * @throws Exception */ public static String decryptByPrivateKey(String text) throws Exception { PKCS8EncodedKeySpec pkcs8EncodedKeySpec5 = new PKCS8EncodedKeySpec(Base64.decodeBase64(privateKey)); 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 publicKeyText * @param text * @return * @throws Exception */ public static String decryptByPublicKey(String publicKeyText, String text) throws Exception { X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(Base64.decodeBase64(publicKeyText)); 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 privateKeyText * @param text * @return * @throws Exception */ public static String encryptByPrivateKey(String privateKeyText, String text) throws Exception { PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(Base64.decodeBase64(privateKeyText)); 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); } // /** // * 公钥加密私钥解密 // */ // private static void test1(RSAKeyPair keyPair, String source) throws Exception { // System.out.println("***************** 公钥加密私钥解密开始 *****************"); // String text1 = encryptByPublicKey(keyPair.getPublicKey(), source); // String text2 = decryptByPrivateKey(keyPair.getPrivateKey(), text1); // System.out.println("加密前:" + source); // System.out.println("加密后:" + text1); // System.out.println("解密后:" + text2); // if (source.equals(text2)) { // System.out.println("解密字符串和原始字符串一致,解密成功"); // } else { // System.out.println("解密字符串和原始字符串不一致,解密失败"); // } // System.out.println("***************** 公钥加密私钥解密结束 *****************"); // } // // /** // * 私钥加密公钥解密 // * // * @throws Exception // */ // private static void test2(RSAKeyPair keyPair, String source) throws Exception { // System.out.println("***************** 私钥加密公钥解密开始 *****************"); // String text1 = encryptByPrivateKey(keyPair.getPrivateKey(), source); // String text2 = decryptByPublicKey(keyPair.getPublicKey(), text1); // System.out.println("加密前:" + source); // System.out.println("加密后:" + text1); // System.out.println("解密后:" + text2); // if (source.equals(text2)) { // System.out.println("解密字符串和原始字符串一致,解密成功"); // } else { // System.out.println("解密字符串和原始字符串不一致,解密失败"); // } // System.out.println("***************** 私钥加密公钥解密结束 *****************"); // } }
快速使用
实际使用:
//2、非对称解密密码 try { loginBody.setPassword(RsaUtil.decryptByPrivateKey(loginBody.getPassword())); } catch (Exception e) { throw new ServiceException("请不要尝试篡改密码!"); }
测试:
public static void main(String[] args) throws Exception{ String password = "changlu"; //使用公钥加密 String encryptPassword = encryptByPublicKey(RsaUtil.publicKey, password); //传入加密过后的密码进行解密 String decodePassword = decryptByPrivateKey(encryptPassword); System.out.println(decodePassword); }
工具类:
import org.apache.commons.codec.binary.Base64; import javax.crypto.Cipher; import java.security.KeyFactory; import java.security.PrivateKey; import java.security.PublicKey; import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.X509EncodedKeySpec; /** * @ClassName RsaUtil * @Author ChangLu * @Date 4/12/2022 4:00 PM * @Description 非对称加解密工具类 */ public class RsaUtil { private static String publicKey = "xxx"; private static String privateKey = "xxx"; /** * RSA密钥对对象 */ public static class RSAKeyPair { private String publicKey; private String privateKey; public RSAKeyPair(String publicKey, String privateKey) { this.publicKey = publicKey; this.privateKey = privateKey; } public String getPublicKey() { return publicKey; } public String getPrivateKey() { return privateKey; } } /** * 私钥解密 * * @param privateKeyText * @param text * @return * @throws Exception */ public static String decryptByPrivateKey(String text) throws Exception { PKCS8EncodedKeySpec pkcs8EncodedKeySpec5 = new PKCS8EncodedKeySpec(Base64.decodeBase64(privateKey)); 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 publicKeyText * @param text * @return */ public static String encryptByPublicKey(String publicKeyText, String text) throws Exception { X509EncodedKeySpec x509EncodedKeySpec2 = new X509EncodedKeySpec(Base64.decodeBase64(publicKeyText)); 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); } }