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 に答える