简单例子:密码加密传送
RSA加密算法是一种非对称加密算法。在前端可以用公钥加密,后端可以用私钥解密。
javascript
<script src="https://passport.cnblogs.com/scripts/jsencrypt.min.js"></script>
<script type="text/javascript">
function login(){
var password = document.form.password.value;// 密码明文
// 公钥
var pubkey='-----BEGIN PUBLIC KEY-----';
pubkey+='MIGfM112CSqGSIb3DQE12QUAA4GNADCBiQKBgQCzDB832vsFQPK4Gl24nKCHDRTwZ';
pubkey+='LQvu4p8PUxmkk8jDFQIDAQAB';
pubkey+='-----END PUBLIC KEY-----';
var encrypt = new JSEncrypt();
encrypt.setPublicKey(pubkey);
// 对密码加密
var encrypted = encrypt.encrypt(JSON.stringify({"encrypt": "yes", "password": password}));
// 设置加密的密码
document.form.password.value = encrypted;
// 提交 省略
}
</script>
PHP
需要开启openssl支持。
// 前端传过来的加密后的密码
$pw = strip_tags(trim($_POST['password']));
// 私钥
$private_key = "-----BEGIN PRIVATE KEY-----
KKIC12345DANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALMMHxzm+wVA8rga
VacoIcNFPBlKReBH0aSp12345pQYBhQr4br3FaM7KCYUxFOh5yNgjYQ51gxlDOWH
67cRTm147777/DYPXGncDDcwXaQ1rq1n62SK7djH4ZN0ViSIZWrpUeol9TxlFfOb
nNNLXxTBSbAtC+7inw9TGaSTyMMVAgMBAAECgYEAkkpmJ999888Y5XmG4FP2+iBY
kWVRIIYtsX66661yItxaIyMThXqasEsGa87t9lNDknEyT4Yd8PSji+r5WhOG2qbe
StPVmGJ+gDYEbGNe5i9W4Dl9898ict/AwnFSu55SErNNOy3J3lUg9stJq45jLU3u
g92a3T0000TFzw==
-----END PRIVATE KEY-----";
// 用私钥解密,解密结果会赋值给$decrypted
openssl_private_decrypt(base64_decode($pw),$decrypted,$private_key);
// 解密结果 Array ( [encrypt] => yes [password] => mima )
$passwordArray = json_decode($decrypted,true);
// 解密后的密码
$pw = $passwordArray['password'];
// 省略