Sign类
Sign
类是用于生成签名的工具类。它可以以两种方式之一使用:
作为一个可写流,写入要签名的数据,sign.sign() 用于生成和返回签名。
使用 sign.update() 和 sign.sign() 方法来产生签名。
crypto.createSign() 方法用于创建 Sign
实例。Sign
对象无法直接使用 new
关键词创建。
示例:将 Sign
对象用作流:
const crypto = require('crypto');
const sign = crypto.createSign('RSA-SHA256');
sign.write('some data to sign');
sign.end();
const private_key = getPrivateKeySomehow();
console.log(sign.sign(private_key, 'hex'));
// Prints the calculated signature
示例:使用 sign.update() 和 sign.sign() 方法:
const crypto = require('crypto');
const sign = crypto.createSign('RSA-SHA256');
sign.update('some data to sign');
const private_key = getPrivateKeySomehow();
console.log(sign.sign(private_key, 'hex'));
// Prints the calculated signature
sign
实例也可以通过传入摘要算法名称来创建,在这种情况下 OpenSSL 将从 PEM 格式的私钥类型推断完全的签名算法,包括没有直接暴露名称常量的算法,如,'ecdsa-with-SHA256'
。
示例:使用 SHA256 的 ECDSA 签名:
const crypto = require('crypto');
const sign = crypto.createSign('sha256');
sign.update('some data to sign');
const private_key = '-----BEGIN EC PRIVATE KEY-----\n' +
'MHcCAQEEIF+jnWY1D5kbVYDNvxxo/Y+ku2uJPDwS0r/VuPZQrjjVoAoGCCqGSM49\n' +
'AwEHoUQDQgAEurOxfSxmqIRYzJVagdZfMMSjRNNhB8i3mXyIMq704m2m52FdfKZ2\n' +
'pQhByd5eyj3lgZ7m7jbchtdgyOF8Io/1ng==\n' +
'-----END EC PRIVATE KEY-----\n';
console.log(sign.sign(private_key).toString('hex'));
sign.update(data[, input_encoding])
用给定的 data
更新 Sign
内容,给出的 input_encoding
编码,可以是 'utf8'
、'ascii'
或 'binary'
。如果没有提供 encoding
,同时 data
是一个字符串,将强制使用 'utf8'
编码。如果 data
是一个 Buffer,那么 input_encoding
参数会被忽略。
当它作为流时,可以在新数据上多次调用。
sign.sign(private_key[, output_format])
使用 sign.update() 或 sign.write() 计算所有传递的数据的签名。
private_key
参数可以是一个对象或字符串。如果 private_key
是一个字符串,它被视为没有密码的原始密钥。如果 private_key
是一个对象,它被解释为包含两个属性的哈希:
key
:{String} - PEM 编码的私钥passphrase
:{String} - 私钥的密码
output_format
可以指定为 'binary'
、'hex'
或 'base64'
中的一种。如果提供了 output_format
则返回一个字符串;否则返回一个 Buffer。
在调用 sign.sign()
方法之后,Sign
对象将不能再次使用。多次调用将导致抛出错误。