【问题标题】:Encryption/decryption using publickey | Crypto Module | NodeJS使用公钥加密/解密 |加密模块 |节点JS
【发布时间】:2018-02-26 23:00:23
【问题描述】:

我正在尝试使用存储在文件中的公钥进行加密/解密。代码如下:

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');
},

我的理解是,我首先将密钥读入字符串,使用带有 UTF8 编码的缓冲区,并使用公共加密方法加密我的文本。现在,当我尝试使用解密方法解密相同的加密文本时,我得到了错误

RSA_padding_check_PKCS1_type_1:块类型不是01

我认为我的公钥存在一些填充问题?但我对两者都使用相同的公钥。在 Crypto.js 中,我在 publicDecrypt Method 下阅读了这个:

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

而且,这在 publicEncrypt 方法下:

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

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

【问题讨论】:

  • 你不能用公钥解密,只有私钥可以解密......这就是使用这些类型的密钥的全部目的。 techopedia.com/definition/9021/public-key-cryptography-pkc
  • 好的,这是否意味着我需要从这个公钥创建一个私钥来解密?
  • 情况正好相反。使用创建该公钥的私钥,或者使用您的私钥创建一个新的公钥...
  • 在旁注中,文档指出私钥可以用作公钥,但不能相反。仅仅因为公钥是由私钥制成的。
  • 好的,感谢您的帮助。我将继续我的研究。此公钥由第 3 方 API 提供商提供,因此我将无法使用他们的密钥解密我的文本。我将需要创建自己的然后进行测试。谢谢!但是,如果无法使用公钥解密,那么为什么要使用这种方法呢? nodejs.org/api/…

标签: javascript node.js encryption


【解决方案1】:

虽然它可能无法解决 OP 中暴露的确切问题。事实是不可能同时使用公钥进行加密和解密。加密和解密应该使用一个公钥和一个私钥。

规则的一个例外是,将私钥用于这两个操作是可行的,因为公钥是从私钥派生的,并且节点可以在幕后进行。

现在,我们收到错误RSA_padding_check_PKCS1_type_1:block type is not 01 的事实可能并非完全由此引起。一旦按预期使用功能,它很有可能不会出现。如果它再次出现,则意味着 PADDING 参数错误,使用可能的值稍微调整一下即可修复它。

【讨论】:

  • 感谢您的澄清。它帮助我了解我做错了什么。
猜你喜欢
  • 1970-01-01
  • 2012-09-09
  • 2011-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多