奇怪,但代码的签名数组长度相同:
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字节长。
答案 0 :(得分:3)
SHA-256和SHA-512分别产生256和512位哈希。
您的RSA密钥为1024或2048位,并且将其用作密码时的块大小相同。
由于两个哈希值均小于RSA块大小,因此需要填充至该大小。而且由于采用了填充,因此无论使用哪种哈希算法,结果签名的大小都是相同的。
这里的线索是最后一个参数,用于指定填充算法。