Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.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
PKCS7在Node.js中加密解密_Node.js_Openssl_Pkcs#7 - Fatal编程技术网

PKCS7在Node.js中加密解密

PKCS7在Node.js中加密解密,node.js,openssl,pkcs#7,Node.js,Openssl,Pkcs#7,我在当前项目中使用pkcs7加密解密。我想从PHP改为Node.js。Node.js中是否有pkcs7加密/解密 在PHP中 <?php $data = <<<EOD Hello world EOD; // load key $key = file_get_contents("mypublickey.crt"); // save message to file $fp = fopen("msg.txt", "w"); fwrite($fp, $data); fclo

我在当前项目中使用pkcs7加密解密。我想从PHP改为Node.js。Node.js中是否有pkcs7加密/解密

在PHP中

<?php

$data = <<<EOD
Hello world
EOD;

// load key
$key = file_get_contents("mypublickey.crt");

// save message to file
$fp = fopen("msg.txt", "w");
fwrite($fp, $data);
fclose($fp);

// encrypt it
if (openssl_pkcs7_encrypt("msg.txt", "enc.txt", $key,array())) {
    // message encrypted - send it!

}
?>

解密

<?php
// The certification stuff
$public = file_get_contents("mypublickey.crt");
$private = array(file_get_contents("myprivatekey.pem"), "mypassword");

$infile = tempnam("", "enc");
file_put_contents($infile, $encrypted); 
$outfile = tempnam("", "dec");

if(openssl_pkcs7_decrypt("enc.txt", "dec.txt", $public, $private))
{
    // Decryption successful
    echo file_get_contents("dec.txt");
}
?>


Node.js中有类似的功能吗?

我也遇到过同样的问题,花了太多时间,但最终我找到了一种方法

我发现并使用了开源库。您可以通过以下方式简单地添加到项目中:

npm install node-forge
var str = Buffer.from(bytes, 'binary').toString('utf8');
然后,下面的代码片段使用
PKCS#7
格式执行加密

var forge = require('node-forge');

// create cert object
var cert = forge.pki.certificateFromPem(certOrPemString);
// create envelop data
var p7 = forge.pkcs7.createEnvelopedData();
// add certificate as recipient
p7.addRecipient(cert);
// set content 
p7.content = forge.util.createBuffer();
p7.content.putString('content to be encrypted');

// encrypt
p7.encrypt();

// obtain encrypted data with DER format
var bytes = forge.asn1.toDer(p7.toAsn1()).getBytes();
此代码块将加密您提供的内容,并返回输出格式为
DER
的字节数组

您可以通过以下方式将字节数组转换为
UTF-8
字符串:

npm install node-forge
var str = Buffer.from(bytes, 'binary').toString('utf8');
您可以按如下方式解密内容:

var recipient = p7.findRecipient(cert);
// decrypt
p7.decrypt(p7.recipients[0], privateKey); 
希望这能有所帮助。

解密数据

示例数据:

Miictgyjkozihvcnaqdoicpzccajscaqaxgghghmiibwgibadcbqtcbzlmakga1ebhmcreuxejaqbgbgbgnvgmcyw5pyteqma4ga1uebwwwqwwwwqwqwqwqwqwqwqwqwqfzyyw5zyw5zyzyzyzyw5bg9wqwqwqwqwqwqwqwqwqwqwqwqwqwqwqwqwqwqwqwqwqwqwqw0bjwqwqwqwqwqwzzzzzzzwqwqwqwqwqwqwqwqwqw5bqwqwqwqwqwqwqwqwqwqwqwqwqwqwq2.中国政府在一份研究报告中提出了一个关于中国政府在一份研究报告中提出了一个关于中国政府在一份研究报告中提出了一个关于中国政府在一份研究报告中提出了一个关于中国政府在一份研究报告中提出了一个关于中国政府在一份研究报告中提出了一个关于中国政府在一份研究报告中提出了一个关于中国政府在一份研究中的一个关于中国政府在一个5个5个中国政府在一个研究中的5个中国政府在一个GGGGv6级5个GGv6 6级的中国政府在一个G6 6级政府在一份研究中提出了一个关于中国政府在一个关于中国政府在一个8 8 8 8 8 8 8 8个中国政府在8 8个8级的8级的8级政府在8级政府在8级的8个中国8级政府在8级8级8级文文文文文8级文8级文8级文8级文8级文8 JYIziawudbaeqbbbmlpfy3WRYJ3UWW7+XNEIHGEAM2MFSF5XFPLEQFKVKTM4W8PFHNF0EHMFQNAPFOWQRQANNWLC+Q9GHx6DCFjTUHl+53x88BrCl1E7FhYPs92

        let data = '-----BEGIN PKCS7-----\r\n' + body + '\r\n-----END PKCS7-----\r\n';
        let p7d = forge.pkcs7.messageFromPem(data)
        let privateCert = forge.pki.decryptRsaPrivateKey(fs.readFileSync(privateCertPath),'password');
        p7d.decrypt(p7d.recipients[0], privateCert);
        console.log(p7d.content)

感谢PHP中pkcs7加密的简明示例:)嘿!你找到在Node.js中实现的方法了吗?没找到。这就是为什么在project中使用php。解密怎么样?@saturngod请看一节。提供了
decrypt()
方法。无法加载私钥。现在,我得到了相同的pkcs7加密base64,比如
var pem=forge.pkcs7.messageToPem(p7)。但是,还不能解密.PKI.privateKeyFromPem(privateKey);由于加密,无法工作。我不知道如何为私钥设置密码。@你最终能在node.js中解密消息吗?