Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用公钥|加密模块|节点进行加密/解密_Javascript_Node.js_Encryption - Fatal编程技术网

Javascript 使用公钥|加密模块|节点进行加密/解密

Javascript 使用公钥|加密模块|节点进行加密/解密,javascript,node.js,encryption,Javascript,Node.js,Encryption,我正在尝试使用存储在文件中的公钥进行加密/解密。代码如下: encryptWithKey (toEncrypt, publicKeyPath) { var publicKey = fs.readFileSync(publicKeyPath, "utf8"); var buffer = new Buffer(toEncrypt, 'utf8'); var encrypted = crypto.publicEncrypt(publicKey, buff

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

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编码的缓冲区,然后使用公共加密方法对文本进行加密。现在,当我尝试使用decrypt方法解密相同的加密文本时,我得到了错误

RSA_padding_check_PKCS1_type_1:块类型不是01

我假设我的公钥存在一些填充问题?但我对这两个都使用相同的公钥。在Crypto.js中,我在publicDecrypt方法下阅读了以下内容:

公钥可以是对象或字符串。如果publicKey是字符串,则 被视为不带密码短语的密钥,并将使用 RSA_PKCS1_填充

并且,在publicEncrypt方法下:

公钥可以是对象或字符串。如果publicKey是字符串,则 被视为不带密码短语的密钥,并将使用 RSA_PKCS1_OAEP_填充


现在,我需要使用公钥作为字符串,而encrypt和decrypt的定义指定用于这些方法的默认填充是不同的。那么,我如何才能做到这一点,使它接受相同的填充

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

该规则的一个例外是,对这两个操作都使用私钥是可行的,因为公钥来自私钥,节点可以在幕后执行


现在,我们得到的错误
RSA\u padding\u check\u PKCS1\u type\u 1:block type not 01
可能并不是由这个原因引起的。一旦功能按预期使用,它很有可能不会出现。如果它再次出现,则表示PADDING参数错误,使用可能的值播放一段时间将修复它。

您无法使用公钥解密,只有私钥才能解密。。。这就是使用这些类型钥匙的全部目的。好的,那么这是否意味着我将需要从这个公钥创建一个私钥来解密?这将是相反的。或者使用创建该公钥的私钥,或者使用私钥创建新的公钥……在旁注中,文档说明私钥可以用作公钥,但不能相反。因为公钥是由私钥生成的。好的,谢谢你的帮助。我会继续我的研究。这个公钥是由第三方API提供商提供的,所以我不能用他们的密钥解密我的文本。我需要创建自己的,然后进行测试。谢谢但是,如果不能使用公钥解密,那么为什么要使用这种方法呢?谢谢你的澄清。它帮助我理解我做错了什么。