MD4 code de hachage généré à partir de Python sont différents de la ligne. Je sais que cela doit être dû à l'encodage. Pouvez-vous aider?
from Crypto.Hash import MD4
psk = 'The quick brown fox jumps over the lazy dog'
h = MD4.new()
h.update(psk.encode('UTF-16LE'))
print(f'UTF-16LE: {h.hexdigest()}')
h.update(psk.encode('UTF-16'))
print(f'UTF-16: {h.hexdigest()}')
h.update(psk.encode('UTF-8'))
print(f'UTF8: {h.hexdigest()}')
h.update(psk)
print(f'UTF8?: {h.hexdigest()}')
Les sorties de hachage pour « Le renard brun rapide saute par-dessus le chien paresseux » dans un codage différent sont les suivants:
UTF-16LE: 4e6a076ae1b04a815fa6332f69e2e231
UTF-16: db8ae265b09c6ffa1e2fc163d66f64a4
UTF8: 324563ee68cc8009c82778d70d958723
UTF8?: 1aaf934b705b1d2aab69b0cf2a9cd87b
La fonction de hachage en ligne MD4 ( https://emn178.github.io/online-tools/md4.html ) donnerait
1bee69a46ba811185c194762abaeae90
Mise à jour :
Merci pour commentaires, j'ai mis à jour le code:
import getpass
from Crypto.Hash import MD4
psk = 'The quick brown fox jumps over the lazy dog' #getpass.getpass()
h = MD4.new(data=psk.encode('UTF-16LE'))
print(f'UTF-16LE: {h.hexdigest()}')
h = MD4.new(data=psk.encode('UTF-16'))
print(f'UTF-16: {h.hexdigest()}')
h = MD4.new(data=psk.encode('UTF-8'))
print(f'UTF8: {h.hexdigest()}')
h = MD4.new(data=psk)
print(f'UTF8?: {h.hexdigest()}')
La nouvelle sortie est
UTF-16LE: 4e6a076ae1b04a815fa6332f69e2e231
UTF-16: c6274a58a30e434503b45d2ce95e6c19
UTF8: 1bee69a46ba811185c194762abaeae90
UTF8?: 1bee69a46ba811185c194762abaeae90
J'ai aussi découvert que https://emn178.github.io/online-tools/md4.html utilisation UTF-16 , même si je l' ai passé un fichier avec l' encodage UTF-16LE.
WPA2 Enterprise requiert du texte à coder en UTF-16LE.
Avec la mise à jour mise à jour de toute évidence le hachage, ce qui signifie que vous nourrissez en plus des morceaux de votre message. Donc, vous nourrissez réellement dans la chaîne à plusieurs reprises avec différents encodages qui à la fin donne un hachage pour plus que votre chaîne.
Si vous ne mettez à jour une fois que vous aurez le résultat escompté.
from Crypto.Hash import MD4
psk = 'The quick brown fox jumps over the lazy dog'
h = MD4.new()
h.update(psk.encode('UTF-8'))
print(f'UTF8: {h.hexdigest()}')
De la documentation du produit de digestion, à partir de laquelle le hexdigest
procédé est un dérivé:
Retour le résumé des chaînes transmises à la
update()
méthode jusqu'à présent. Ceci est une chaîne d'digest_size
octets qui peuvent contenir des caractères non-ASCII, y compris les octets nuls.