js如何使用RSA加密或解密数据?jsencrypt使用指南
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
苏南大叔在本文中描述一款开源代码jsencrypt
,主要功能就是在前端js
中,对敏感数据进行RSA
加密,同一个数据每次加密的结果,并不一致,但是在服务器端都能够解密出唯一数据。当然,这款jsencrypt
也自带前端js
解密功能。
本文测试环境:mac
/chrome
/jsencrypt@3.0.0-rc.1
。从下图可以看到,每次加密的结果都不一样:
下载jsencrypt
这款RSA
加密源码库jsencrypt
,截至到发稿,其最新版本为3.0.0-rc.1
。其github
地址是:
其官方主页是:
下载到的压缩包里面的bin/jsencrypt.min.js
,才是真正需要的用在网页里面的js
引用文件。如果您需要对源码自行编译,请使用gulp
工具进行编译。
处理密钥对
可以参考下面的文字,获得一对密钥:
在接下来的范例代码中,公钥私钥就是一行文本。包含着每个字符,并且没有换行。对于js
代码来说,您可能需要手工删除一下公钥和私钥的每个换行符,合并成一行文本。特别注意的是:
- 要保留开头结尾的注释
- 要保留空格
当然这里也有个苏南大叔写的js
替换换行符号的代码,仅供参考:
var i = document.getElementById("private").value;
i = i.replace(new RegExp("\n","gm"),"");
i = i.replace(new RegExp("\r","gm"),"");
//i = i.replace(new RegExp(" ","gm"),"");
document.getElementById("private").value = i;
使用公钥加密数据(常用)
下面的代码,是使用jsencrypt
对数据进行RSA
公钥加密的基本姿势:
var encrypt = new JSEncrypt();
encrypt.setPublicKey("<这里放置公钥文本>");
var encrypted = encrypt.encrypt("<这里放置要加密的文本>");
console.log(encrypted);
使用私钥解密数据(可能不常见)
下面的代码是使用jsencrypt
对数据进行RSA
私钥解密的基本姿势:
var decrypt = new JSEncrypt();
decrypt.setPrivateKey("<这里放置私钥文本>");
var uncrypted = decrypt.decrypt("<这里放置加密完的文本>");
console.log(uncrypted);
注意:在这里,解密失败是会返回一个false
的,可以作为大家判断是否解密成功的判断依据。
sign
和verify
功能
官方还提供了签名sign
和签名校验verify
的功能,不过苏南大叔暂时也用不到,所以这两个功能暂存。
var sign = new JSEncrypt();
sign.setPrivateKey(“<这里放置私钥文本>”);
var signature = sign.sign(“<这里放置文本>”, CryptoJS.SHA256, "sha256");
// Verify with the public key...
var verify = new JSEncrypt();
verify.setPublicKey($("<这里放置公钥文本>");
var verified = verify.verify(“<这里放置签名文本>”, CryptoJS.SHA256);
特别说明
因为对于苏南大叔来说,更多的使用情况是:在前端加密用户输入的数据,然后在后端进行解密。那么jsencrypt
的加密解密功能,苏南大叔其实也就用得到其中的加密功能。
另外,在日常使用过程中,苏南大叔建议您:
- 仅用于加密数字字母等简单字符,而对于中文字符,特别是一些生僻字,会发生解密失败的情况。
- 同其它的加密算法一样,加密完成后,字符串体积会明显增加,所以尽量不要用于加密较长数据。
总结
更多rsa
加密解密的博客文章,请点击苏南大叔的博客链接:
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。