Node.js' crypto.createSign() 的有效算法输入字符串
Valid algorithm input strings for Node.js' crypto.createSign()
我正在为一个项目使用node的加密签名,并且一直在尝试考虑各种算法的起伏。crypto.createSign()
的说明如下:
创建并返回使用给定算法的 Sign 对象。在最近的 OpenSSL 版本中,
openssl list-public-key-algorithms
将显示可用的签名算法。一个例子是"RSA-SHA256"。
不幸的是,"RSA-SHA256"不是openssl list-public-key-algorithms
的输出值之一(如下所示)。
那么这个函数的有效值是什么,或者如何从下面的列表中提取它们呢?
OpenSSL list result:
Name: OpenSSL RSA method
Type: Builtin Algorithm
OID: rsaEncryption
PEM string: RSA
Name: rsa
Type: Alias to rsaEncryption
Name: OpenSSL PKCS#3 DH method
Type: Builtin Algorithm
OID: dhKeyAgreement
PEM string: DH
Name: dsaWithSHA
Type: Alias to dsaEncryption
Name: dsaEncryption-old
Type: Alias to dsaEncryption
Name: dsaWithSHA1-old
Type: Alias to dsaEncryption
Name: dsaWithSHA1
Type: Alias to dsaEncryption
Name: OpenSSL DSA method
Type: Builtin Algorithm
OID: dsaEncryption
PEM string: DSA
Name: OpenSSL EC algorithm
Type: Builtin Algorithm
OID: id-ecPublicKey
PEM string: EC
Name: OpenSSL HMAC method
Type: Builtin Algorithm
OID: hmac
PEM string: HMAC
Name: OpenSSL CMAC method
Type: Builtin Algorithm
OID: cmac
PEM string: CMAC
好的,经过一些暴力破解和良好的猜测,有效算法输入字符串的结构似乎没有什么意义。开始看起来像规则的东西有很多例外。如果省略公钥算法,RSA 似乎是默认值。以下是 DO 工作的值的不完整列表:
仅公钥算法:
- "DSA"
单独哈希:
- "MD4"
- "MD5"
- "沙"
- "DSS1"
- "MDC2"
- "SHA1"
- "SHA224"
- "SHA256"
- "SHA512"
公钥算法哈希对:
- "RSA-MD4"
- "RSA-MD5"
- "RSA-SHA"
- "RSA-MDC2"
- "RSA-SHA1"
- "RSA-SHA224"
- "RSA-SHA256"
- "RSA-SHA512"
- "DSA-SHA"
- "DSA-SHA1"
我不是密码学家,所以RSA可能需要明确的哈希选择,或者DSA与sha512或md5不兼容,但我发现这些不一致更有可能是由openSSL的实现引起的。
运行crypto.getHashes()
以获取可用签名算法的列表。
例如,如果您在节点v8.15.0
中运行它,则您将获得:
[ 'DSA',
'DSA-SHA',
'DSA-SHA1',
'DSA-SHA1-old',
'RSA-MD4',
'RSA-MD5',
'RSA-MDC2',
'RSA-RIPEMD160',
'RSA-SHA',
'RSA-SHA1',
'RSA-SHA1-2',
'RSA-SHA224',
'RSA-SHA256',
'RSA-SHA384',
'RSA-SHA512',
'dsaEncryption',
'dsaWithSHA',
'dsaWithSHA1',
'dss1',
'ecdsa-with-SHA1',
'md4',
'md4WithRSAEncryption',
'md5',
'md5WithRSAEncryption',
'mdc2',
'mdc2WithRSA',
'ripemd',
'ripemd160',
'ripemd160WithRSA',
'rmd160',
'sha',
'sha1',
'sha1WithRSAEncryption',
'sha224',
'sha224WithRSAEncryption',
'sha256',
'sha256WithRSAEncryption',
'sha384',
'sha384WithRSAEncryption',
'sha512',
'sha512WithRSAEncryption',
'shaWithRSAEncryption',
'ssl2-md5',
'ssl3-md5',
'ssl3-sha1',
'whirlpool' ]
在节点 v10.15.1
中,您将获得:
[ 'RSA-MD4',
'RSA-MD5',
'RSA-MDC2',
'RSA-RIPEMD160',
'RSA-SHA1',
'RSA-SHA1-2',
'RSA-SHA224',
'RSA-SHA256',
'RSA-SHA384',
'RSA-SHA512',
'blake2b512',
'blake2s256',
'md4',
'md4WithRSAEncryption',
'md5',
'md5-sha1',
'md5WithRSAEncryption',
'mdc2',
'mdc2WithRSA',
'ripemd',
'ripemd160',
'ripemd160WithRSA',
'rmd160',
'sha1',
'sha1WithRSAEncryption',
'sha224',
'sha224WithRSAEncryption',
'sha256',
'sha256WithRSAEncryption',
'sha384',
'sha384WithRSAEncryption',
'sha512',
'sha512WithRSAEncryption',
'ssl3-md5',
'ssl3-sha1',
'whirlpool' ]
我认为节点文档是错误的。对于crypto.createSign()
,请使用以下命令列出可能性:
openssl list-message-digest-algorithms
相关文章:
- 循环比赛位置算法
- javascript扫雷器floodfill算法不能正常工作
- 如何有效地将游戏数据存储在URL查询字符串中
- 如何使用Node.js最有效地解析网页
- jquery代码在Mozilla中有效,但在其他浏览器上无效
- 有效形式-始终只显示1个错误[角度]
- Javascript袖珍参考,第121页:这是怎么回事;猴子补丁”;方法应该有效
- 单击仅在第二次单击后有效
- 什么'是在asp.net MVC中将本地化的resources.resx文件转换为javascript文件的有效
- 为什么自我执行匿名有效
- D3.js生成有效的SVG,但不显示任何内容
- 如何在AngularJS中有效地检查日期是否有效
- Node JS中的排名系统算法
- 为什么不是'我的函数在解析云代码中工作吗?当我在Angular和Express中测试时,它是有效的
- 方程的有效算法
- Node.js' crypto.createSign() 的有效算法输入字符串
- 有效的javascript算法,用于从数组中选择项目,其中每个条目具有不同的权重
- 这是有效的JavaScript数组比较算法
- 如何使用verhoeff算法验证输入的aadhar编号是否有效
- 随机算法&有效地放置100个圆圈,没有任何重叠