Node.js 中的 crypto.privateDecrypt() 方法
的是用于解密通过使用在使用与所述相应的公钥先前加密的参数传递私钥给定的数据内容的方法。crypto.privateDecrypt()crypto.publicEncrypt()
语法
crypto.privateDecrypt(privateKey, buffer)
参数
上述参数描述如下-
key –它可以包含以下5种类型的数据–Object、String、Buffer或KeyObject。
oaepHash –该字段包含用于OAEP填充和MGF1的散列函数。默认值为:'sha1'。
oaepLabel –该字段包含OAEP填充的值。如果未指定,则不使用标签。
padding –这是在crypto.constants中定义的可选值。
buffer –该字段包含要解密的数据内容。可能的缓冲区类型有:string、TypedArray、Buffer、ArrayBuffer、DataView。
示例
创建一个具有名称的文件-privateDecrypt.js并复制以下代码片段。创建文件后,使用以下命令运行此代码,如下例所示-
node privateDecrypt.js
私有解密.js
//Node.jsprogram演示了crypto.privateDecrypt()方法的流程
//导入加密和fs模块
const crypto = require('crypto');
const fs = require("fs");
//读取公钥。
//您可以使用generateKeyPair()生成这些密钥
publicKey = fs.readFileSync('public_key').toString();
//传递以下要加密的文本
var buf = Buffer.from('Hello nhooo', 'utf8');
//加密上面的文本
secretData = crypto.publicEncrypt(publicKey, buf);
//打印加密文本
console.log(secretData);
//读取私钥
privateKey = fs.readFileSync('private_key').toString();
//解密加密文本
origData = crypto.privateDecrypt(privateKey, secretData);
console.log();
//将原始文本打印为缓冲区
console.log(origData);输出结果C:\home\node>> node privateDecrypt.js
示例
让我们再看一个例子。
//Node.jsprogram演示了crypto.privateDecrypt()方法的流程
//导入加密和fs模块
const crypto = require('crypto');
const fs = require("fs");
//使用generateKeyPairSync()方法生成密钥文件
function generateKeyFiles() {
const keyPair = crypto.generateKeyPairSync('rsa', {
modulusLength: 530,
publicKeyEncoding: {
type: 'spki',
format: 'pem'
},
privateKeyEncoding: {
type: 'pkcs8',
format: 'pem',
cipher: 'aes-256-cbc',
passphrase: ''
}
});
//在以下文件中写入密钥
fs.writeFileSync("public_key", keyPair.publicKey);
fs.writeFileSync("private_key", keyPair.privateKey);
}
//调用生成密钥方法
generateKeyFiles();
//加密传递的字符串
function encryptString (plaintext, publicKeyFile) {
const publicKey = fs.readFileSync(publicKeyFile, "utf8");
//使用publicEncrypt()方法和公钥加密数据
const encrypted = crypto.publicEncrypt(
publicKey, Buffer.from(plaintext));
return encrypted.toString("base64");
}
//用私钥解密传递的字符串
function decryptString (ciphertext, privateKeyFile) {
const privateKey = fs.readFileSync(privateKeyFile, "utf8");
//使用privateDecrypt()方法解密数据
//和相应的私钥
const decrypted = crypto.privateDecrypt(
{
key: privateKey,
passphrase: '',
},
Buffer.from(ciphertext, "base64")
);
return decrypted.toString("utf8");
}
//以下数据将被加密和解密
const plainText = "nhooo!";
//调用下面的方法来加密字符串
const encrypted = encryptString(plainText, "./public_key");
//打印纯文本
console.log("Plaintext:", plainText);
console.log();
//打印加密文本
console.log("加密文本: ", encrypted);
console.log();
//打印解密后的文本
console.log("解密文本: ",
decryptString(encrypted, "private_key"));输出结果C:\home\node>> node privateDecrypt.js Plaintext: nhooo! 加密文本: AbSrqG4qFBG1q9KUBt8ddJxk9uNanOHXqY19N0mNHx0fm4M119dZVhcNrAvM8UaIRJvh7AsdWyjv1s cPA25KpeJuJQ== 解密文本: nhooo!