2017-09-14 3 views
1

Ou, en général, un nombre arbitraire ou bits qui est pas un multiple de 8.Python: obtenir digest de hachage SHA256() d'un seul bit en Python

Selon hashlib.py il y a une méthode constructeur nommé pour SHA256 . Ensuite, j'utilise sha256() pour créer un objet de hachage SHA256. Je peux maintenant nourrir cet objet avec des chaînes arbitraires en utilisant la méthode update(), et à tout moment je peux lui demander le résumé de la concaténation des chaînes qui lui ont été fournies jusqu'à présent en utilisant les méthodes digest() ou hexdigest().

Bien. Je voudrais nourrir 1 bit à SHA256 en ligne avec ce lien "What is the SHA-256 hash of a single '1' bit?"

En Python 2.7, bien sûr. Donc, quelle est la procédure pour hacher une entrée longue de 1 bit composée du bit "1"? (pas l'entrée long octet [] {1} de 8 bits)?

+0

Oui, mais le remplissage est effectué en fonction de la longueur de l'entrée en bits. Il y a des exemples dans d'autres langues, il y a du code C disponible dans [section 8] [1] de [RFC 4634] [2] pour calculer le hachage de données qui n'est pas nécessairement un multiple de 8 bits. Voir les méthodes dont les noms sont 'SHA * FinalBits (...)'. [1]: http://tools.ietf.org/html/rfc4634#section-8 [2]: http://tools.ietf.org/html/rfc4634 –

+0

oui, MAIS IL N 'YA PAS 1 -BIT TYPE EN PYTHON – hop

+0

Bien sûr, il est, il est appelé booléen. – allo

Répondre

2

Ni l'API hashlib ni le module C sous-jacent ne prennent en charge autre chose que des "tampons d'octets". Puisque la norme SHA prescrit d'ajouter quelque chose au n'importe quel message, quelle que soit la longueur, vous ne pouvez même pas "pré-remplir" votre entrée en python pour contourner cette restriction.

Pour démontrer (prise de https://tools.ietf.org/html/rfc4634#section-4.1):

>>> sha256('abcde').hexdigest() 
'36bbe50ed96841d10443bcb670d6554f0a34b761be67ec9c4a8ad2c0c44ca42c' 

>>> sha256('abcde\x80' + 57*'\x00' + '\x28').hexdigest() 
'45cb103e6385e1330c892d1566d4d82f0c1c256947e54206704973c6c2adf4f6' 

Bien que le calcul du hachage d'un message avec une longueur qui est un multiple de 8 pourrait techniquement être permis, je doute fort qu'il ya réel cas d'utilisation du monde pour cela (qui nécessitent l'utilisation de seulement la librairie standard python, pas moins).