关于javascript:节点套件“ node-rsa”的解密问题

Decryption Issue with Node Package “node-rsa”

我正在尝试使用该库的RSA函数实现简单的公钥加密,但是解密似乎已被破坏。

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

1
2
3
4
5
6
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);
};

然后,当鲍勃去阅读消息时,他传递了完整的密钥并从ctext.txt中解码消息,如下面的函数所示

1
2
3
4
5
module.exports.readMessage = key => {
    const encryptedMessage = fs.readFileSync('ctext.txt');
    const message = key.decrypt(encryptedMessage, 'utf8');
    return message;
};

加密工作得很好,并且Alice能够将密文发送到ctext。当bob调用readMessage函数并尝试解密文本时,就会出现问题。在此过程中,Alice和Bob程序均已激活,并且其键保持不变。解密时发生以下错误:

1
2
3
4
5
6
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


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