我正在尝试使用javascript(使用crypto-js和jsbn库)在RSA中加密/解密长消息。
到目前为止,为了加密/解密短消息,我有以下代码:
function encrypt(signedCert, msg) {
key = new RSAKey();
m = asciiToHex(msg);
m = new BigInteger(m, 16)
//n and e retrieved from the digital certificate
key.setPublic(signedCert.msg.subject.pk.n, signedCert.msg.subject.pk.e);
var ctxt = key.doPublic(m).toString(16);
return ctxt;
}
function decrypt(sk, ctxt) {
key = new RSAKey();
c = new BigInteger(ctxt, 16);
key.setPrivate(sk.n, sk.e, sk.d);
var ptxt = key.doPrivate(c).toString(16);
var ptxt = hexToAscii(ptxt);
return ptxt;
}
当消息很短时,这就像一个魅力。但是,对于我的生活,当消息很长时,我无法弄清楚如何加密/解密!
任何人都可以帮忙吗?谢谢:))
答案 0 :(得分:2)
您没有量化“短”和“长”,但我猜您的“长”消息超出了您正在使用的密钥的最大消息大小。
由于构建了RSA算法,因此无法加密大于RSA密钥大小的消息。密钥大小通常以位为单位进行测量,因此将密钥大小除以8以获得可使用特定密钥加密的最大消息。例如。 2048位密钥可以加密最多2048 / 8 = 256
字节的消息。
有关此限制的更深入说明,您可以在此处阅读我对类似问题的回答:Message length restriction in RSA。