Ang*_*yel 2 php rsa encryption-asymmetric node.js
我正在尝试为制作肥皂请求创建WS。邮件的正文中有一个包含加密文本的字段。我有公用密钥来加密文本,但是我获得的唯一结果是无法识别文本。我使用节点的加密模块发出请求,并且文本被加密,但是我不知道为什么不正确加密。
附言:我用openssl_public_encrypt函数在php上进行了同样的操作。但是我必须在node.js中做到这一点。
有什么想法或建议吗?与crypto.publicEncrypt函数的openssl_public_encrypt有什么不同?
这是node.js中的加密部分:
var crypto = require("crypto");
var fs = require('fs');
fs.readFile("./certificate.pem", 'utf8', function (err, data) {
var bufferToEncrypt = new Buffer("textToEncrypt");
var encrypted = crypto.publicEncrypt({"key":data, padding:crypto.RSA_NO_PADDING}, bufferToEncrypt).toString("base64");
console.log(encrypted); // length 128
}
Run Code Online (Sandbox Code Playgroud)
在PHP中的同样的事情:
<?php
$publicKey = "./certificate.pem";
$plaintext = "textToEncrypt";
openssl_public_encrypt($plaintext, $encrypted, $publicKey);
echo base64_encode($encrypted); //encrypted string length 128
?>
Run Code Online (Sandbox Code Playgroud)
我没有用于解密文本的私钥,只有公钥。
还要注意,在php和node.js中,加密文本的长度(在base64中)是相同的。
我想填充是您的问题。在node.js中,您指定padding:crypto.RSA_NO_PADDING。当查询openssl_public_encrypt()它的文档时说它OPENSSL_PKCS1_PADDING默认使用。请尝试以下操作:
var constants = require("constants");
var encrypted = crypto.publicEncrypt({"key":data,
padding:constants.RSA_PKCS1_PADDING}, bufferToEncrypt).toString("base64");
Run Code Online (Sandbox Code Playgroud)
我已经准备了一个在线演示:
$encrypted_encoded对PHP解密例子建议:根据经验,请勿对实际消息使用非对称加密。而是使用它来保护对称密钥。但是,您的用例可能是有效的,我只想在每次有人谈论RSA加密时都声明一下。
| 归档时间: |
|
| 查看次数: |
3263 次 |
| 最近记录: |