【问题标题】:Node.js: Getting Invalid RSAES-OAEP padding when trying to decrypt an encrypted symmetric keyNode.js:尝试解密加密的对称密钥时获得无效的 RSAES-OAEP 填充
【发布时间】:2018-09-23 08:18:05
【问题描述】:

我有一个用例,我想先用对称密钥加密我的数据,然后用客户端的公钥加密对称密钥。我试图模拟该场景,但出现“无效 RSAES-OAEP 填充”错误。

代码:

var forge = require('node-forge');
var _crypto = require('crypto');
var rsa = forge.pki.rsa;

var masterKey = _crypto.randomBytes(32);
var keypair = rsa.generateKeyPair(2048);
var encryptedVal = keypair.publicKey.encrypt(masterKey, 'RSA-OAEP');
var decryptedVal = keypair.privateKey.decrypt(encryptedVal, 'RSA-OAEP');
console.log(masterKey,decryptedVal)

我必须在加密之前转换对称密钥格式吗?如果是,是什么?

【问题讨论】:

    标签: node.js encryption aes rsa cryptojs


    【解决方案1】:

    masterKeyBuffer。您需要将其转换为字节,以便 forge 可以使用它

    试试这个功能(我没测试过……)

    function toBytes(buf) {
        var byteString = '';
        for (var i = 0; i < buf.length; ++i) {
            byteString += String.fromCodePoint(buf[i]);
        }
        return byteString;
    }
    

    用法

    var masterKey = toBytes(_crypto.randomBytes(32));
    

    【讨论】:

    • 谢谢!!!我没有使用此功能,但将缓冲区转换为字符串会有所帮助。我在加密之前和解密之后使用了 masterKey.toString('base64'),然后使用 new Buffer(key, 'base64') 取回了 masterKey。
    • 这也是一个有效的解决方案,因为 base64 是一种用 64 个字符的字母表对二进制数据进行编码的方法,结果是一个 char 数组。当您有足够的声誉时,考虑将答案标记为已接受或赞成
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-22
    • 1970-01-01
    • 2012-10-16
    • 1970-01-01
    • 2018-04-05
    • 2020-05-28
    • 2012-06-13
    相关资源
    最近更新 更多