SHA256签名与RSA-SHA256签名之间的区别

阿里姆

使用node.js数字签名为了进行测试,我首先使用SHA256,然后使用RSA-SHA256创建了一些XML数据的数字签名。

让我感到困惑的是,两种签名方法都创建了完全相同的签名这两个签名是相同的。如果它们相同,那么为什么要使用两种不同的方法(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));

上面的代码输出一些字符串,这是签名,然后再次输出完全相同的字符串,这也是相同数据的签名,但是创建了(假设是)不同的算法,但是与先前的算法相同...

mkl

不能仅由SHA256创建签名。

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

在您的crypto API上下文中,当未显式命名处理时,RSA加密方案是默认处理,或者从您在sign调用中用作参数的私钥推导处理的类型-如果它是RSA私钥,它使用RSA;如果它是DSA密钥,则使用DSA;...

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章