使用publickey加密/解密|加密模块|的NodeJS

时间:2017-09-18 12:00:42

标签: javascript node.js encryption

我正在尝试使用存储在文件中的公钥来加密/解密。这是代码:

encryptWithKey (toEncrypt, publicKeyPath) {
        var publicKey = fs.readFileSync(publicKeyPath, "utf8");
        var buffer = new Buffer(toEncrypt, 'utf8');
        var encrypted = crypto.publicEncrypt(publicKey, buffer);
        return encrypted.toString("base64"); //converting it to base64 string
},
decryptWithKey (toDecrypt, publicKeyPath) {
        var publicKey = fs.readFileSync(publicKeyPath, "utf8");
        var b = new Buffer(toDecrypt, 'base64') // converting back to normal string from base 64 string
        var decrypted = crypto.publicDecrypt(publicKey, b);
        return decrypted.toString('utf8');
},

我的理解是,我首先将Key读入字符串,使用带有UTF8编码的缓冲区,并使用公共加密方法对我的文本进行格式化。现在,当我尝试使用decrypt方法解密相同的加密文本时,我收到错误

  

RSA_padding_check_PKCS1_type_1:块类型不是01

我认为我的公钥存在一些填充问题?但是我使用相同的公钥。在Crypto.js中,我在publicDecrypt Method:

下阅读
  

publicKey可以是对象或字符串。如果publicKey是一个字符串,它   被视为没有密码短语的密钥并将使用   RSA_PKCS1_PADDING。

并且,这在publicEncrypt方法下:

  

publicKey可以是对象或字符串。如果publicKey是一个字符串,它   被视为没有密码短语的密钥并将使用   RSA_PKCS1_OAEP_PADDING。

现在,我需要使用公钥作为字符串,加密和解密的定义指定用于这些方法的默认填充是不同的。那么我怎么能这样做,所以它接受相同的填充?

1 个答案:

答案 0 :(得分:1)

虽然它可能无法修复OP中暴露的确切问题。事实是,不可能使用公钥进行加密和解密。加密和解密应使用一个公钥和一个私钥完成。

规则的一个例外是两个动作使用私钥是可行的,因为公钥来自私钥,节点可以在场景后面进行。

现在,我们收到错误RSA_padding_check_PKCS1_type_1:block type is not 01的事实可能不是由此引起的。一旦功能按预期使用,它很可能不会出现。如果它再次出现意味着PADDING参数错误,并且使用可能的值进行一些操作将修复它。