js、php、java使用非对称加密(RSA)进行加密通讯
RSA加密算法是一种非对称加密算法。在电商、银行等交易系统里使用广泛,今天我们演示通过js、java、php来实现浏览器端公钥加密,服务端(java、php)私钥解密的单向非对称加密过程。
前提工作
linux下利用openssl生成证书
1、在linux服务器下执行一下命令产生一个私钥文件
openssl genrsa -out rsa_1024_priv.pem 1024你可以用一下命令查看私钥内容,复制出来,待会要用到
cat rsa_1024_priv.pem2、利用私钥产生公钥文件,在命令行中继续执行一下命令
openssl rsa -pubout -in rsa_1024_priv.pem -out rsa_1024_pub.pem执行以下命令,打开公钥文件,复制出来,待会要用到
cat rsa_1024_pub.pem前端
前端js主要利用jsencrypt库使用刚刚生成的公钥对数据进行加密,将加密后的数据传到后端(java或php)
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>BFW NEW PAGE</title> <script id="bfwone" data="dep=jquery.17&err=0" type="text/javascript" src="http://repo.bfw.wiki/bfwrepo/js/bfwone.js"></script> <script type="text/javascript"> bready(function() { use(["jsencrypt"], function() { var encrypt = new JSEncrypt(); encrypt.setPublicKey('刚刚生成的公钥文件内容'); var encrypted = encrypt.encrypt('加密的字符串');//利用ajax传回后端 }); }); </script> </head> <body> </body> </html>后端
JAVA
/** * RSA私钥解密 * * @param str 加密字符串 * @param privateKey 私钥 * @return 明文 * @throws Exception 解密过程中的异常信息 */ public static String decrypt(String str, String privateKey) throws Exception { //64位解码加密后的字符串 byte[] inputByte = Base64.getDecoder().decode(str); //base64编码的私钥 byte[] decoded = Base64.getDecoder().decode(privateKey); RSAPrivateKey priKey = (RSAPrivateKey) KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(decoded)); //RSA解密 Cipher cipher = Cipher.getInstance("RSA"); cipher.init(Cipher.DECRYPT_MODE, priKey); String outStr = new String(cipher.doFinal(inputByte)); return outStr; }
PHP
//私钥解密 function decrypt($data){ if (!$data) { return false; } if(!openssl_private_decrypt(base64_decode($data), $decrypt_data, "刚刚生成的私钥文件内容")) { return false; } return $decrypt_data; }ok,整个Rsa加密通讯过程就完成了
网友评论0