📜  Node.js crypto.verify()函数(1)

📅  最后修改于: 2023-12-03 15:03:12.542000             🧑  作者: Mango

Node.js crypto.verify()函数

crypto.verify()是Node.js中的一个内置模块,它通过数字签名验证提供了一个逆向操作,以确保一个消息是由指定的私钥持有者签名而不是伪造的。

语法
crypto.verify(algorithm, data, key, signature, [encoding])

参数含义:

  • algorithm: String 类型,指定用于签名和验证消息的哈希算法,如"MD5"、"SHA256"等。
  • data: Buffer | DataView | TypedArray | DataURI | String 类型,待验证的数据。
  • key: String | Buffer | TypedArray | KeyObject 类型,公钥。
  • signature: Buffer | DataView | TypedArray | String 类型,要验证的签名数据。
  • encoding: String 类型,可选的。用来指定签名和消息数据的编码方式,如"utf8"、"base64"等。
示例

下面给出一个例子:

const crypto = require('crypto');

// 生成密钥对
const { privateKey, publicKey } = crypto.generateKeyPairSync('rsa', {
    modulusLength: 2048
});

// 待签名数据
const data = 'Hello World';

// 签名
const sign = crypto.sign('sha256', Buffer.from(data), privateKey);

// 验证签名
const isVerified = crypto.verify('sha256', Buffer.from(data), publicKey, sign);

console.log(`签名验证结果: ${isVerified}`);

该程序生成了一个2048位的RSA密钥对,并使用PrivateKey对象对数据进行签名。然后使用公钥公开签名验证操作。

输出结果:

签名验证结果: true
注意事项
  • 因为数据受签名方式的限制,签名算法必须与验证算法匹配,否则无法成功验证。
  • 密钥的生成可以使用async方式,或者也可以使用openssl或其他密码学库来生成密钥对。
  • 如果调用方需要使用不同类型的密钥对进行签名和验证操作,则要分别使用sign()verify()方法实现。