gpt4 book ai didi

node.js - 使用 SHA256 签名与使用 RSA-SHA256 签名之间的区别

转载 作者:行者123 更新时间:2023-12-01 07:00:24 27 4
gpt4 key购买 nike

我玩 数字签名使用 node.js。出于测试目的,我创建了一些 XML 数据的数字签名,首先仅使用 SHA256,然后使用 RSA-SHA256。

让我困惑的是两种签名方法创建完全相同的签名 .两个签名是相同的。如果它们相同,那么为什么要使用两种不同的方法(SHA256 与 RSA-SHA256)?

我在下面包含代码:

var crypto = require('crypto'),
path = require('path'),
fs = require('fs'),

pkey_path = path.normalize('private_key.pem'),
pkey = '';

function testSignature(pkey) {
var sign1 = crypto.createSign('RSA-SHA256'),
sign2 = crypto.createSign('SHA256');

fs.ReadStream('some_document.xml')
.on('data', function (d) {
sign1.update(d);
sign2.update(d);
})
.on('end', function () {
var s1 = sign1.sign(pkey, "base64"),
s2 = sign2.sign(pkey, "base64");

console.log(s1);
console.log(s2);
});
}

// You need to read private key into a string and pass it to crypto module.
// If the key is password protected, program execution will stop and
// a prompt will appear in console, awaiting input of password.

testSignature(fs.readFileSync(pkey_path));

上面的代码输出一些字符串,即签名,然后再次输出完全相同的字符串,这也是相同数据的签名,但使用 - 据说 - 不同的算法创建,但它与前一个相同......

最佳答案

单独的 SHA256 无法创建签名。

SHA256 是一种散列算法;即创建代表任意大量数据的短指纹编号的算法。为了产生一个签名,这个指纹仍然必须以某种方式处理,以允许识别一些私有(private)签名 key 的持有者。一种这样的处理方法是使用 rsa key 对的私钥对指纹进行加密,从而允许其他人使用关联的公钥解密结果,从而验证私钥的保管者确实是签名者。

在您的加密 API 的上下文中,RSA 加密方案要么是未明确命名的默认处理方式,要么是从您在 sign 中用作参数的私钥推导出来的处理方式。 call --- 如果是 RSA 私钥,则使用 RSA;如果是 DSA key ,则使用 DSA; ...

关于node.js - 使用 SHA256 签名与使用 RSA-SHA256 签名之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27039489/

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