在Web项目中有些时候需要对传输的数据加密后再传输到服务端进行解密使用,这里采用RSA进行公钥加密 私钥解密的模式会有较高的安全性。

这里选用的工具库是 JSEncrypt.js 与 javax.crypto.Cipher 

一、获取公钥与私钥

  这里直接使用 JSEncrypt.js 来生成最初的公钥与私钥即可,在浏览器控制台中输入下面代码获取结果

1 var crypt = new JSEncrypt();
2 var publicKey = crypt.getPublicKey(); 
3 var privateKey = crypt.getPrivateKey();
4 console.log("publickKey",publickKey);
5 console.log("privateKey",privateKey);

 

  

二、转换私钥格式

  由于Java中使用的密钥格式是 PKCS8 而 JSEncrypt.js 生成的私钥是 PKCS#1 格式,所以需要进行格式转换,这里用到一个在线转换工具http://tool.chacuo.net/cryptrsapkcs1pkcs8 进行私钥格式转换。

前端加密数据

1 var publicKey = "RSA PUBLIC KEY";//前面生成的公钥字符串 
2 var crypt = new JSEncrypt(); 
3 crypt.setPublicKey(publicKey); 
4 crypt.encrypt(value);

 

三、后端解密数据

 1 import javax.crypto.Cipher;
 2 import java.security.KeyFactory;
 3 import java.security.spec.PKCS8EncodedKeySpec;
 4 import java.util.Base64;
 5 
 6 public class RSAUtils {
 7     private static Cipher cipher = null;
 8     public static String decoder(String password) throws Exception {
 9         if (cipher == null) {
10             String privateKey = "RSA PRIVATE KEY";//前面转换后PKCS8格式私钥
11             cipher = Cipher.getInstance("RSA");
12             String privateKeyPEM = privateKey.replace("-----BEGIN PRIVATE KEY-----", "")
13                    .replace("-----END PRIVATE KEY-----", "")
14                    .replaceAll("\\s", "");
15             byte[] privateKeyByte = Base64.getDecoder().decode(privateKeyPEM);
16             cipher.init(Cipher.DECRYPT_MODE, KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(privateKeyByte)));
17         }
18         byte[] passwordByte = Base64.getDecoder().decode(password);
19         return new String(cipher.doFinal(passwordByte));
20     }
21 }

 

引用内容

原文地址:http://www.cnblogs.com/masahiro/p/16877887.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性