4

我有一个奇怪的问题。在我的代码中,我创建了一个 sha512 哈希算法并用它签署了一些数据。现在我希望哈希是 512 位长,但它是 128。我犯了什么错误?

我的代码:

var hashAlgorithm = HashAlgorithm.Create( „SHA512“ );
var signedhHash = rsaCryptoServiceProvider.SignData( plainData, hashAlgorithm );

PS。我已经从使用以下脚本创建的文件中加载了 RSA 密钥:

makecert -r -n "CN=myCert" -sky exchange -sy 24 -sv myCert.pvk myCert.cer
cert2spc myCert.cer myCert.spc
pvk2pfx -pvk myCert.pvk -spc myCert.spc -pfx myCert.pfx –f

编辑:

我从 得到长度signedhHash.Length,等于 128。

4

2 回答 2

3

哈希值的大小为 512,但带符号的哈希值(来自SignData)的大小为 1024。

var alg = HashAlgorithm.Create("SHA512");
var hashArr = alg.ComputeHash(ASCIIEncoding.UTF8.GetBytes("test"));
var size = hashArr.Length * 8; //512

var rsaCryptoServiceProvider = new RSACryptoServiceProvider();
var signedValue = rsaCryptoServiceProvider.SignData(ASCIIEncoding.UTF8.GetBytes("test"), alg);
size = signedValue.Length * 8; //1024

(1 字节 = 8 位)

于 2013-03-07T12:18:19.503 回答
0

SignData 不返回使用 SHA512 算法生成的散列,它返回使用提供者的 SignatureAlgorithm 属性生成的散列签名 ( http://www.w3.org/2000/09/xmldsig#rsa-sha1 )

于 2013-03-07T12:40:10.957 回答