使用jsencrypt.js进行RSA加密

JavaScript019

使用jsencrypt.js进行RSA加密,第1张

一个基于RSA加解密的js库

使用公钥结合 jsencrypt 提供的 encrypt 方法(需要加密的内容)进行加密

使用私钥结合 jsencrypt 提供的 decrypt 方法进行解密

用javascript实现rsa加解密的实现方式是通过PKCS完成的。

1、整个定义的function

function pkcs1pad2(s,n) {

if(n <s.length + 11) { // TODO: fix for utf-8

alert("Message too long for RSA")

return null

}

var ba = new Array()

var i = s.length - 1

while(i >= 0 &&n >0) {

var c = s.charCodeAt(i--)

//UTF-8编码为变长字节,使用实际的字节来记录

if(c <128) { // encode using utf-8

ba[--n] = c

}

else if((c >127) &&(c <2048)) {

ba[--n] = (c &63) | 128

ba[--n] = (c >>6) | 192

}

else {

ba[--n] = (c &63) | 128

ba[--n] = ((c >>6) &63) | 128

ba[--n] = (c >>12) | 224

}

}

//实际输入拼装结束,将下一位赋值为0标记结束

ba[--n] = 0

var rng = new SecureRandom()

var x = new Array()

//拼接随机非0字节

while(n >2) { // random non-zero pad

x[0] = 0

while(x[0] == 0) rng.nextBytes(x)

ba[--n] = x[0]

}

//这两位做简单的校验

ba[--n] = 2

ba[--n] = 0

return new BigInteger(ba)

}

该方法中对UTF-8字符进行了兼容,并且在拼装完实际输入的字符后,还拼装了随机的字节,使用拼装后的字符串去加密。由于每次拼装的结果是随机的,这样每次加密后的密文都不同。

2、调用方法:;

function RSAEncrypt(text) {

var m = pkcs1pad2(text,(this.n.bitLength()+7)>>3)

if(m == null) return null

var c = this.doPublic(m)

if(c == null) return null

var h = c.toString(16)

if((h.length &1) == 0) return helse return "0" + h

}

自己太小白了,之前在PC端项目中使用的MD5加密,现在的小程序项目使用了 CryptoJS 里面的 enc-base64 和 hmac-sha1 ,之前没有用到过这两种,所以比较疑惑,为何在小程序不继续使用 MD5 呢?所以在这里记录一下自己解疑惑的一些知识点。

随着互联网的兴起,我们对信息的安全越来越受重视,这样就导致在web开发中,对用户密码等各种加密变得更加重要了。与服务器的交互中,为了确保数据传输的安全性,避免被黑客抓包篡改。

对于Base64编码的,我觉得看一篇文章能够解决你的疑惑,我在这里就不赘述了