前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >前端(JS)与后端(PHP) 通过 RSA 实现加解密

前端(JS)与后端(PHP) 通过 RSA 实现加解密

作者头像
句小芒
发布2022-12-29 18:11:25
1.7K0
发布2022-12-29 18:11:25
举报
在项目开发过程中,为了安全起见,通常不能以明文形式传递敏感信息,容易被截获,所以引入RSA。
1. 生成公钥和私钥
  • 在终端(基于 Unix 的操作系统)中输入以下内容。生成私钥
代码语言:javascript
复制
openssl genrsa -out rsa_1024_priv.pem 1024
  • 通过执行以下命令获取公钥
代码语言:javascript
复制
openssl rsa -pubout -in rsa_1024_priv.pem -out rsa_1024_pub.pem
  • 可以使用 cat 命令来查看
代码语言:javascript
复制
cat rsa_1024_priv.pem         //查看私钥
cat rsa_1024_pub.pem          //查看公钥
  • 前端代码:
代码语言:javascript
复制
<script src="http://code.jquery.com/jquery-1.8.3.min.js"></script>
<script src="bin/jsencrypt.min.js"></script>
<script type="text/javascript">
$(function () {
    //被加密的信息,这里一般是后端传递的接口参数
    var data = 'date';

    //公钥,这里使用自己生成的公钥
    var pub_key = '-----BEGIN PUBLIC KEY-----\n' +
'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDFUEBi3D1Q8yFco32wWI/se4lA\n' +
'ftsCNi71rgkLNsOhIR3ZOGywKsKjoZ7pewG6PDvISEodkZxVDlV401VP8sIPFP1d\n' +
'fwdNEZQRHugDiuLIVRdkGWh0loviWWFJuzvJuOFxxyv9IyLt2Whvvoy3y8T9Hntl\n' +
'tgmIbwW9wMA8U1XP9wIDAQAB\n' +
'-----END PUBLIC KEY-----';

    //私钥,这里使用自己生成的私钥
    var private_key = '-----BEGIN RSA PRIVATE KEY-----\n' +
'MIICXgIBAAKBgQDFUEBi3D1Q8yFco32wWI/se4lAftsCNi71rgkLNsOhIR3ZOGyw\n' +
'KsKjoZ7pewG6PDvISEodkZxVDlV401VP8sIPFP1dfwdNEZQRHugDiuLIVRdkGWh0\n' +
'loviWWFJuzvJuOFxxyv9IyLt2Whvvoy3y8T9HntltgmIbwW9wMA8U1XP9wIDAQAB\n' +
'AoGBALoZOuEDQIG9DtZFDSLqJLSyv30pKH8pg5kMkFMXT+QFTBW4diqh6fpTUYJ9\n' +
'FeAFN41rQRwqXfyLDGptSKWjHQtcBDzpYil+CrFnFFIzADgUtzfKVnfMwgO3X5yx\n' +
'j+akB9Pm+er1F9t2qh7OwpbiWXo2ThF5Sfn7PjvdVswmOhsBAkEA7MecQO+PIGzr\n' +
'wwwRLadSyT+fIt8dYxdrZ+Hjc+ff9uo3gAM/IBj08fIHLHf8WOaEwz3G0l944xbm\n' +
'GtcqO9XllwJBANVUg8ZOIkzY0o2EmoP8zxmjIs4WsUrF2msp7vI9kHLeIUBLCwyv\n' +
'fAh0x2SRQTfbr0ZZb7593VyvUGbuP/F4dKECQQCHmZkmpwr0quwp+5Mq7hQ/JKxi\n' +
'MByITzU3fOnhyv08Ts4SBcn0+9XraYwqL1zZHMsTdSGUAREeHFMTM/3/3nNpAkAl\n' +
'jeA4u658GrtOIGbXD10h5T8OSp5hTF07+kDPMhlIr2PpHozOaeIK1wv23z885xZ+\n' +
'6uWqAhxC4bXkuNJW3t6hAkEApKMMfLafxv3S8u8ilRku8JSegPLY325GB2vWHC8H\n' +
'jY+Hv3qF9xcP5cbj43KPF0wWhKCECVSvPaMiwUbJzgu9JQ==\n' +
'-----END RSA PRIVATE KEY-----';

    //new JSEncrypt
    var js_encrypt = new JSEncrypt();//必须引入jsencrypt.mim.js 文件,否则会报错
    //注意:如果加密就使用公钥,解密就使用私钥,按自己的需求
    //初始化公钥
    js_encrypt.setPublicKey(pub_key);
    //初始化私钥
    js_encrypt.setPrivateKey(private_key);

    //通过 公钥 加密
    var encrypted = js_encrypt.encrypt(data);
    console.log(encrypted);

    //通过 私钥 解密
    var uncrypted = js_encrypt.decrypt(encrypted);
    console.log(uncrypted);
});
</script>
  • 后端代码
代码语言:javascript
复制
class Encrypt
{
	//公钥和秘钥
    const PUBKEY= '-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDFUEBi3D1Q8yFco32wWI/se4lA
ftsCNi71rgkLNsOhIR3ZOGywKsKjoZ7pewG6PDvISEodkZxVDlV401VP8sIPFP1d
fwdNEZQRHugDiuLIVRdkGWh0loviWWFJuzvJuOFxxyv9IyLt2Whvvoy3y8T9Hntl
tgmIbwW9wMA8U1XP9wIDAQAB
-----END PUBLIC KEY-----';

    const PRIVATEKEY = '-----BEGIN RSA PRIVATE KEY-----
MIICXgIBAAKBgQDFUEBi3D1Q8yFco32wWI/se4lAftsCNi71rgkLNsOhIR3ZOGyw
KsKjoZ7pewG6PDvISEodkZxVDlV401VP8sIPFP1dfwdNEZQRHugDiuLIVRdkGWh0
loviWWFJuzvJuOFxxyv9IyLt2Whvvoy3y8T9HntltgmIbwW9wMA8U1XP9wIDAQAB
AoGBALoZOuEDQIG9DtZFDSLqJLSyv30pKH8pg5kMkFMXT+QFTBW4diqh6fpTUYJ9
FeAFN41rQRwqXfyLDGptSKWjHQtcBDzpYil+CrFnFFIzADgUtzfKVnfMwgO3X5yx
j+akB9Pm+er1F9t2qh7OwpbiWXo2ThF5Sfn7PjvdVswmOhsBAkEA7MecQO+PIGzr
wwwRLadSyT+fIt8dYxdrZ+Hjc+ff9uo3gAM/IBj08fIHLHf8WOaEwz3G0l944xbm
GtcqO9XllwJBANVUg8ZOIkzY0o2EmoP8zxmjIs4WsUrF2msp7vI9kHLeIUBLCwyv
fAh0x2SRQTfbr0ZZb7593VyvUGbuP/F4dKECQQCHmZkmpwr0quwp+5Mq7hQ/JKxi
MByITzU3fOnhyv08Ts4SBcn0+9XraYwqL1zZHMsTdSGUAREeHFMTM/3/3nNpAkAl
jeA4u658GrtOIGbXD10h5T8OSp5hTF07+kDPMhlIr2PpHozOaeIK1wv23z885xZ+
6uWqAhxC4bXkuNJW3t6hAkEApKMMfLafxv3S8u8ilRku8JSegPLY325GB2vWHC8H
jY+Hv3qF9xcP5cbj43KPF0wWhKCECVSvPaMiwUbJzgu9JQ==
-----END RSA PRIVATE KEY-----';

    /**
     * 解密
     * @param string $encryptString
     * @return bool|string
     */
    public static function privateDecrypt($encryptString = '')
    {
        $decrypted  = '';
        openssl_private_decrypt(base64_decode($encryptString), $decrypted, self::PRIVATEKEY);
        return $decrypted;
    }

    /**
     * 加密
     * @param string $data
     * @return bool|string
     */
    public static function publicEncrypt($data = '')
    {
        $encrypt_data = '';
        openssl_public_encrypt($data, $encrypt_data, self::PUBKEY);
        $encrypt_data = base64_encode($encrypt_data);
        return $encrypt_data;
    }
}
  • 然后在此基础上根据自己需求进行相关功能实现。 Github 地址:jsencrypt.min.js
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-06-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 在项目开发过程中,为了安全起见,通常不能以明文形式传递敏感信息,容易被截获,所以引入RSA。
    • 1. 生成公钥和私钥
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档