gpt4 book ai didi

node.js - 从 rsa key 获取“指纹”

转载 作者:太空宇宙 更新时间:2023-11-03 23:47:51 25 4
gpt4 key购买 nike

通过使用crypto模块,可以很容易地在 Node 中创建私钥/公钥对。但如何计算 key 的“指纹”?

OpenCrypto有类似的东西:

crypt.getFingerprint(key, options).then(function (fingerprint) {
console.log(fingerprint)
})

Node 加密模块的等效项是什么?

最佳答案

OpenCrypto.getFingerprint以 X509 DER 格式导出 RSA 公钥并为这些数据创建哈希。这同样适用于 RSA 私钥,区别在于私钥以 Pkcs8 DER 格式导出。可以在选项中指定摘要(默认值:SHA 512),还可以指定数据是否作为缓冲区或十六进制字符串返回(默认值:十六进制字符串)。

在 NodeJS 代码中,可以使用 crypto.generateKeyPair 生成 key ,由此可以明确指定 key 格式。如果 key 尚未采用适当的格式(X509 DER 和 Pkcs8 DER),则可以执行 key 转换以生成与 OpenCrypto.getFingerprint 创建的相同指纹。适合这些操作的函数有 crypto.createPublicKeycrypto.createPrivateKey 。最后必须使用 crypto.createHash 生成哈希值.

更新:

指纹只不过是一个哈希值,例如使用摘要 SHA-512(如 OpenCrypto.getFingerprint 中所示):

var fingerprint = crypto.createHash('sha512').update(key).digest('hex'); // Fingerprint (hash) as hexadecimal string

其中 key 是任意格式的公钥或私钥 ( string, Buffer, ... )。如果 key 以 X509 DER(公共(public))或 PKCS8 DER(私有(private))形式给出,则指纹OpenCrypto.getFingerprint 的指纹匹配

如果 key 是其他格式,也可以通过这种方式确定指纹。但是,如果指纹应该匹配OpenCrypto.getFingerprint提供的值,则 key 当然必须转换为OpenCrypto.getFingerprint使用的格式> 在生成哈希之前。这种转换并不是很复杂,例如将公共(public) PKCS1 PEM key (publicKey) 转换为 X509 DER key (publicKeyDER),包括生成哈希:

var publicKeyDER = crypto.createPublicKey(publicKey, { type: 'pkcs1', format: 'pem' }).export({ type: 'spki', format: 'der' }); // Convert a public PKCS1 PEM key into a X509 DER key
var fingerprint = crypto.createHash('sha512').update(publicKeyDER).digest('hex'); // Fingerprint (hash) as hexadecimal string

最重要的是,这些操作在功能上与 OpenCrypto.getFingerprint 中执行的操作相同。据我所知,NodeJS crypto 模块中没有对应的 OpenCrypto.getFingerprint 。但只需很少的努力,您就可以使用上述crypto函数编写自己的函数。

关于node.js - 从 rsa key 获取“指纹”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60393439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com