jsrsasign不支持公钥解密

JavaScript05

jsrsasign不支持公钥解密,第1张

题主是否想询问“jsrsasign不支持公钥解密的解决办法”?

1、首先进入jsencrypt/lib/lib/jsbn/rsa.js。

2、然后在rsa.js文件中,第207行附近的RSAKey.prototype.decrypt方法中,将 this.doPrivate(c) 改为 this.doPublic(c)。

3、同样在rsa.js文件中,找到第310行附近的pkcs1unpad2方法,并将这三行代码注释。

4、最后保存修改后的rsa.js文件,就实现了jsencrypt使用公钥解密数据的功能。

一个基于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

}