RSA.SignHash SHA512和SHA256给出相同的签名长度

时间:2018-07-04 03:46:14

标签: c# hash cryptography rsa

奇怪,但代码的签名数组长度相同:

using (RSA rsa = certifiateToUse.GetRSAPrivateKey())
        {
            byte[] bytesData = Encoding.UTF8.GetBytes(input);
            byte[] hash512 = rsa.SignHash(bytesData, HashAlgorithmName.SHA512, RSASignaturePadding.Pss);
            byte[] hash256 = rsa.SignHash(bytesData, HashAlgorithmName.SHA256, RSASignaturePadding.Pss);
        }

hash512和hash256的数组长度均为512。我找不到对此的合理答案。也许我缺少明显的东西?我希望它分别是512和256字节长。

1 个答案:

答案 0 :(得分:3)

SHA-256和SHA-512分别产生256和512位哈希。

您的RSA密钥为1024或2048位,并且将其用作密码时的块大小相同。

由于两个哈希值均小于RSA块大小,因此需要填充至该大小。而且由于采用了填充,因此无论使用哪种哈希算法,结果签名的大小都是相同的

这里的线索是最后一个参数,用于指定填充算法。