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加密后的数据: 解密后的数据: