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
<Buffer 57 65 6c 63 6f 6d 65 20 74 6f 20 54 75 74 6f 72 69 61 6c 73 50 6f 69
6e 74>
加密后的数据:
<Buffer a6 9d e3 86 9f 3f 4b b9 3f f7 a6 9c 7c 16 0f 04 b9 c4 16 0b 08 f1 06
39 de 32 75 7c 26 88 fa 49 bd 31 6b 4b 4d 02 e6 87 56 ee 9c 95 53 10 8f 28 49
f5 ... >
解密后的数据:
<Buffer 57 65 6c 63 6f 6d 65 20 74 6f 20 54 75 74 6f 72 69 61 6c 73 50 6f 69
6e 74>