首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Node.js中的PKCS7加解密

Node.js中的PKCS7加解密
EN

Stack Overflow用户
提问于 2012-12-26 16:29:46
回答 2查看 6.7K关注 0票数 4

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

在PHP中,

代码语言:javascript
复制
<?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!

}
?>

解密

代码语言:javascript
复制
<?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中有类似的函数吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-19 05:15:50

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

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

代码语言:javascript
复制
npm install node-forge

然后,下面的代码片段执行PKCS#7格式的加密。

代码语言:javascript
复制
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字符串:

代码语言:javascript
复制
var str = Buffer.from(bytes, 'binary').toString('utf8');

您可以按如下方式解密内容:

代码语言:javascript
复制
var recipient = p7.findRecipient(cert);
// decrypt
p7.decrypt(p7.recipients[0], privateKey); 

希望这能有所帮助。

票数 11
EN

Stack Overflow用户

发布于 2020-11-21 01:31:26

解密数据

示例数据:

MIICTgYJKoZIhvcNAQcDoIICPzCCAjsCAQAxggHGMIIBwgIBADCBqTCBmzELMAkGA1UEBhMCREUxEjAQBgNVBAgMCUZyYW5jb25pYTEQMA4GA1UEBwwHQW5zYmFjaDEVMBMGA1UECgwMU3RlZmFuIFNpZWdsMRIwEAYDVQQLDAlHZWllcmxlaW4xFjAUBgNVBAMMDUdlaWVybGVpbiBERVYxIzAhBgkqhkiG9w0BCQEWFHN0ZXNpZUBicm9rZW5waXBlLmRlAgkA1FQcQNg14vMwDQYJKoZIhvcNAQEBBQAEggEAJhWQz5SniCd1w3A8uKVZEfc8Tp21I7FMfFqou+UOVsZCq7kcEa9uv2DIj3o7zD8wbLK1fuyFi4SJxTwxkR0a6V4bbonIpXPPJ1f615dc4LydAi2tv5w14LJ1Js5XCgGVnkAmQHDaW3EHXB7XT4w9PR3+tcS/5YAnWaM6Es38zCKHd7TnHpuakplIkwSK9rBFAyA1g/IyTPI+ktrEEHcVuJcz/7eTlF6wJEa2HL8F1TVWuL0p/0GsJP/8y0MYGdCdtr+TIVo//3YGhoBlN4tnheFT/jRAzfCZtflDdgAukW24CekrJ1sG2M42p5cKQ5rGFQtzNy/n8EjtUutOHD5YITBsBgkqhkiG9w0BBwEwHQYJYIZIAWUDBAEqBBBmlpfy3WrYj3uWW7+xNEiHgEAm2mfSF5xFPLEqqFkvKTM4w8PfhnF0ehmfQNApvoWQRQanNWLCT+Q9GHx6DCFjTUHl+53x88BrCl1E7FhYPs92

代码语言:javascript
复制
        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)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14037917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档