首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Node包"node-rsa“的解密问题

Node包"node-rsa“的解密问题
EN

Stack Overflow用户
提问于 2019-02-20 13:53:04
回答 1查看 1.3K关注 0票数 0

我试图用这个库的RSA函数实现简单的公钥加密,但解密似乎被破坏了。

我有两个“用户”,爱丽丝和鲍勃。爱丽丝和鲍勃(代码在不同的文件中)都通过const key = new nodeRSA()创建了一个新的空密钥。然后,它们都通过函数key.generateKeyPair(2048)生成2048位公钥和私钥对。然后,它们都通过使用key.exportKey('pkcs8-public-pem')从密钥导出它们,并将它们存储到单独的文件中,然后使用fs读取它们,从而相互提供它们的公钥。然后,Alice尝试通过将字符串message和bob的公钥传递到下面的函数来向bob写入消息

代码语言:javascript
复制
module.exports.writeMessage = (message, key) => {
    const k = new rsa(key, 'pkcs8-public-pem')
    const cipherText = k.encrypt(message, 'hex');
    console.log('Saving "${cipherText}" to ctext.txt');
    fs.writeFileSync('ctext.txt', cipherText);
};

然后,当bob读取消息时,他传递完整的密钥并解码来自ctext.txt的消息,如下面的函数所示

代码语言:javascript
复制
module.exports.readMessage = key => {
    const encryptedMessage = fs.readFileSync('ctext.txt');
    const message = key.decrypt(encryptedMessage, 'utf8');
    return message;
};

加密工作正常,Alice可以将密文发送到ctext。当bob调用readMessage函数并试图解密文本时,问题就出现了。Alice和Bob程序都被激活,并且它们的密钥在整个过程中保持不变。解密时出现以下错误:

代码语言:javascript
复制
Error: Error during decryption (probably incorrect key). Original error: Error: Incorrect data or key
    at NodeRSA.module.exports.NodeRSA.$$decryptKey (/Users/jisacf1/College/SeniorYear/Spring2019/CompSec/HW3/node_modules/node-rsa/src/NodeRSA.js:301:19)
    at NodeRSA.module.exports.NodeRSA.decrypt (/Users/jisacf1/College/SeniorYear/Spring2019/CompSec/HW3/node_modules/node-rsa/src/NodeRSA.js:249:21)
    at Object.module.exports.readMessage.key [as readMessage] (/Users/jisacf1/College/SeniorYear/Spring2019/CompSec/HW3/Part2/rsaReadWrite.js:7:25)
    at inquirer.prompt.then (/Users/jisacf1/College/SeniorYear/Spring2019/CompSec/HW3/Part2/bob.js:42:43)
    at processTicksAndRejections (internal/process/next_tick.js:81:5)

我真的不明白系统怎么会认为它是不正确的密钥,因为Alice使用Bob的公钥加密了消息,而Bob使用的是私钥对消息进行了解码。我也尝试过更改填充方案,但也没有效果。任何帮助都将不胜感激。作为参考,该库的github在这里:https://github.com/rzcoder/node-rsa

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-21 09:11:53

正如Maarten所提到的,问题是writeFileSync以utf8而不是密文的格式对我的密文进行编码。这会导致读回不正确的密文,从而导致密钥或数据不匹配异常。将函数的默认编码更改为十六进制解决了该问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54779663

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档