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

Ole*_*sii 3 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);
}
Run Code Online (Sandbox Code Playgroud)

hash512 和 hash256 的数组长度均为 512。我找不到一个合理的答案。也许我错过了一些明显的东西?我预计它的长度分别为 512 和 256 字节。

Jon*_*art 6

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

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

由于两个哈希值都小于 RSA 块大小,因此需要将它们填充到该大小。并且因为它们被填充,所以无论使用何种散列算法生成的签名都将具有相同的大小

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