2016-05-27 7 views
0

Моя цель - выполнить «Hashsigning» с помощью смарт-карты в python. используются hashlib, но в python нет особых функций SHA1 или SHA256. Моя работа:Как создать хэш sha1 в python

hash_object = hashlib.sha1(b'HelWorld') 
pbHash = hash_object.hexdigest() 

но длина объекта хэш-я получаю 28, а я должен получить 14 или 20, так что я могу включить условие как

switch (dwHashLen) 
{ 
case 0x14: // SHA1 hash 
      call scard transmit 
case 0x20: // SHA256 hash 
} 

Любая помощь приветствуется. Заранее спасибо

+0

Что вы подразумеваете под длиной объекта hash? И где вы получаете 28? SHA1 имеет длину 40 символов. –

+0

и что вы имеете в виду 'switch' и' case', который, безусловно, не является питоном ... – domoarrigato

+0

сам файл sha1 составляет 20 байт - кодировка в шестнадцатеричной кодировке - 40 символов. может быть, это и есть здесь. sha256 - 32 байта (64 символа в шестнадцатеричном формате). не уверен, что должно быть 14 - даже md5 - 16 байт. – domoarrigato

ответ

1

Вы на самом деле получаете 40, что в шестнадцатеричном виде - 0x28. Расшифруйте хэш в шестнадцатеричной в ASCII следующим образом

>>> import hashlib 
>>> hash_object = hashlib.sha1(b'HelWorld') 
>>> pbHash = hash_object.hexdigest() 
>>> length = len(pbHash.decode("hex")) 
>>> print length 
20 

Или просто использовать digest вместо hexdigest, как Dan D предложил.

+0

это похоже правильный. – domoarrigato