我正在使用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中有类似这样的功能吗?
解密数据
示例数据:
Miictgyjkozihvcnaqcdoiicpzcajscaqaxgghgmiibwgibadcbqtcbmzelmakga1uebhmcreuxejaqbgnvbagmcuzyyw5jb25pyteqma4ga1uebwwwhqww5zymfjadevmbga1uecgwwww5jb25pyteqma1uebwwwww5jbmdwdmbga1uecgwwmu3rlzmfuifnwwdsmriweaydvqqldalhzwllmxlaw4xfj
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)
我也面对过同样的问题,花了太多的时间,但最终我找到了一条路。
我找到并使用了forge开源库。您可以通过以下操作简单地添加到项目中:
npm install node-forge
然后,下面的代码段使用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
字符串:
var str = Buffer.from(bytes, 'binary').toString('utf8');
并且您可以按照如下方式解密内容:
var recipient = p7.findRecipient(cert);
// decrypt
p7.decrypt(p7.recipients[0], privateKey);
希望这能有所帮助。
我当前在解密服务器上的RSA加密数据时遇到了问题,服务器使用Node.js并使用node-rsa库进行加密/解密。 在我的Android客户端上没有任何问题地接收到公钥,但是当尝试解密数据时,我得到了以下异常: 这就是我在客户端上生成公钥的方式 以下是客户端的加密:
就像我说的,一切都很好,除了这个小的decypt...我搜索了谷歌和所有的东西,尝试了示例代码,但似乎我的代码有些东西不对。
接下来,我使用java用接收到的公钥加密字符串,因此我将pkcs8公钥解析为java PublicKey对象。 并用它加密文本 它运行良好,并返回一个Base64编码的加密字符串,如下所示 未捕获的错误:解密时出错(可能是密钥不正确)。原始错误:错误:错误解码消息,从提供的标签计算出的lHash和加密数据中的lHash不匹配。(…)然而,我已经测试过,如果我只在javascript中加密和解密文本
问题内容: 我正在通过Apache和Node.js服务器之间的不安全连接发送数据。我需要在PHP中加密数据并在Node.js中解密。我花了2天的时间使它正常工作,但是我只设法使消息签名正常工作,没有加密。我尝试将AES128-CBC,AES256-CBC,DES,AES128,AES256作为算法传递,但是效果不佳。 我在PHP中尝试过: 在Node.js中: 而且除了错误的解密数据外,我还会得到
问题内容: 我一直在寻找一个解决方案,并在Node.js服务器和Objective-C客户端上进行加密,反之亦然,使用AES(或其他合适的方法)进行搜索 我对密码学还比较陌生,因此我无法理解为什么每种语言的加密文本都不同。 这是我到目前为止的内容: 使用此CryptoJS库的 Node.js加密方法 -node-cryptojs-aes 使用AESCrypt库的 Objective-C加密方法 多
我有一个问题解密文本,它是在Go lang加密,使用CryptoJS。 下面是Go代码:https://play.golang.org/p/xcbl48t_in 这里是JS代码:http://jsfidle.net/ltkxm64n/ 这两种方法都能很好地加密和解密,但是当我将base64密文从GO复制到JS(或者反过来)时,它就不起作用了。我还注意到js输出的第一部分与Go输出相同,但在js输出