Node.js 中的 crypto.publicDecrypt() 方法
该用于公共密钥来解密在缓冲区中的给定数据。该缓冲区是通过使用相应的私钥即方法加密的。crypto.publicDecrypt()crypto.privateEncrypt()
语法
crypto.publicDecrypt(key, buffer)
参数
上述参数描述如下-
key –它可以包含以下5种类型的数据–Object、String、Buffer或KeyObject。
密码 -这是私钥的可选密码。
padding–这是在crypto.constants中定义的可选值。
encoding –这是当缓冲区、密钥、oaepLabel或密码值是字符串时需要使用的编码类型。
buffer –该字段包含要加密的数据内容。可能的缓冲区类型有:string、TypedArray、Buffer、ArrayBuffer、DataView。
示例
创建一个具有名称的文件-publicDecrypt.js并复制以下代码片段。创建文件后,使用以下命令运行此代码,如下例所示-
node publicDecrypt.js
公开解密.js
//crypto.publicDecryptDemo示例
//导入crypto、fs和path模块
var crypto = require('crypto');
var fs = require('fs');
const path = require('path');
//创建以下用于生成密钥的函数
function generateKeyFiles() {
const keyPair = crypto.generateKeyPairSync('rsa', {
modulusLength: 520,
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();
//读取私钥和公钥
var private = fs.readFileSync('private_key');
var public = fs.readFileSync('public_key');
//定义原始数据
var data = 'Welcome to nhooo';
console.log("原始数据为: "+data);
//使用私钥加密数据
encrypted = crypto.privateEncrypt(private, Buffer.from(data, 'utf8')).toString('base64');
//使用公钥解密数据
originalData = crypto.publicDecrypt(public, Buffer.from(encrypted, 'base64'));
console.log();
//打印加密消息
console.log("用私钥加密: " + encrypted);
console.log();
//打印解密的消息
console.log("用公钥解密: " + originalData.toString());输出结果C:\home\node>> node publicDecrypt.js 原始数据为: Welcome to nhooo 用私钥加密: EFBihrKebXb0gfCF7nTnw82yXpToH5eVBpLc8O5QL/ZgfZ/qJT5I/BejSMwV4NFCp+AIKnz2lrjmFh IhnpZWbF4= 用公钥解密: Welcome to nhooo
示例
让我们再看一个例子。
//crypto.publicDecryptDemo示例
//导入crypto和fs模块
var crypto = require('crypto');
var fs = require('fs');
//创建以下用于生成密钥的函数
function generateKeyFiles() {
const keyPair = crypto.generateKeyPairSync('rsa', {
modulusLength: 520,
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();
//读取私钥
privateKey = fs.readFileSync('private_key').toString();
var buffer = Buffer.from('Welcome to nhooo', 'utf8');
console.log("Data buffer before encryption")
console.log(buffer);
//加密缓冲区文本
encrypted = crypto.privateEncrypt(privateKey, buffer);
//加密后打印数据
console.log("加密后的数据: ");
console.log(encrypted);
//读取公钥
publicKey = fs.readFileSync('public_key').toString();
//使用公钥解密加密文本
decryptedData = crypto.publicDecrypt(publicKey, encrypted);
//打印原始内容
console.log("解密后的数据: ");
console.log(decryptedData);输出结果C:\home\node>> node publicDecrypt.js Data buffer before encryption加密后的数据: 解密后的数据: