2013-03-07 2 views
4

У меня странная проблема. В моем коде я создаю хэш-алгоритм sha512 и подписываю некоторые данные с ним. Теперь я ожидал бы, что хэш будет 512 бит в длину, но это 128. Какая ошибка я сделал?Алгоритм Hashvalue от SHA512 имеет длину 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 

Edit:

Я получил длину от signedhHash.Length, равный 128.

+0

Где вы рассчитываете длину? – Patrick

+0

Рассчитать длину? Вы имеете в виду что-то вроде: signedhHash.Length (signedhHash.Length равно 128) – musium

+0

Вы указываете «это 128 бит в длину», где вы получаете этот номер? – Patrick

ответ

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 бит)

+0

Некоторые, как я не видел, что был ответ уже отправлен, когда я вернулся на страницу, чтобы опубликовать мой – SpaceghostAli

+0

Большое спасибо! Значит, это означает, что signedhHash.Length всегда равен rsaCryptoServiceProvider.KeySize/8? – musium

+1

@ user1320170 Да – Magnus

Смежные вопросы