Node.js 中的 crypto.privateDecrypt() 方法

node.jsjavascriptweb developmentfront end technology

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

privateDecrypt.js

// Node.js 程序演示 crypto.privateDecrypt() 方法的流程

// 导入 crypto 和 fs 模块
const crypto = require('crypto');
const fs = require("fs");

// 读取公钥。
//您可以使用 generateKeyPair() 生成这些密钥
publicKey = fs.readFileSync('public_key').toString();

// 传递以下要加密的文本
var buf = Buffer.from('Hello TutorialsPoint', '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
ode>> node privateDecrypt.js <Buffer 15 4b 51 02 e7 1c ec 11 20 55 ee 92 b2 18 7b ce f1 e1 97 bd b7 0d 54 21 18 ea 0c e7 cd 51 36 f5 13 df fb 41 c1 63 bb ac ee 94 12 df f6 d6 04 b1 9c 11 ... > <Buffer 48 65 6c 6c 6f 20 54 75 74 6f 72 69 61 6c 73 50 6f 69 6e 74>

示例

我们再看一个例子。

// Node.js 程序演示 crypto.privateDecrypt() 方法的流程

// 导入 crypto 和 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 enabled = crypto.publicEncrypt(
      publicKey, Buffer.from(plaintext));

   return enabled.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 = "TutorialsPoint!";

// 调用下面的方法加密字符串
const enabled = encryptString(plainText, "./public_key");

// 打印纯文本
console.log("Plaintext:", plainText);
console.log();

// 打印加密文本
console.log("Encrypted Text: ", enabled);
console.log();

// 打印解密文本
console.log("Decrypted Text: ",
   decryptString(encrypted, "private_key"));

输出

C:\home
ode>> node privateDecrypt.js Plaintext: TutorialsPoint! Encrypted Text: AbSrqG4qFBG1q9KUBt8ddJxk9uNanOHXqY19N0mNHx0fm4M119dZVhcNrAvM8UaIRJvh7AsdWyjv1s cPA25KpeJuJQ== Decrypted Text: TutorialsPoint!

相关文章