2012-10-14 6 views
1

J'ai un mot de passe MD5 de 1 million de symboles et j'ai 999 992 premiers symboles. J'ai besoin de bruteforce les 8 derniers chiffres. Puis-je précomposer le hachage des premiers symboles (appelons-le hachage de base), puis juste 8 caractères longueur de la chaîne brute et ajouter son hachage à la base de hachage pour faire de trouver le droit de passer plus vite? Quel algorithme dois-je utiliser ou quel logiciel peut m'aider?Précalculer MD5

+0

Vous parlez d'un mot de passe d'un million de caractères, pas d'un million de mots de passe différents, n'est-ce pas? – Wyzard

+0

Oui. Un mot de passe qui contient un million de caractères. Je sais hash et tous les caractères sauf les 8 derniers et je veux trouver le bon mot de passe rapidement. – michaeluskov

Répondre

2

Oui, c'est possible. MD5 est basé sur le Merkle-Damgård construction, qui exécute le hachage en blocs. Vous pouvez hacher un certain nombre de blocs, puis enregistrer l'état de la fonction de hachage et l'utiliser comme point de départ pour essayer différentes possibilités pour les blocs restants.

Sur la base de la documentation (je ne l'ai pas testé), je pense appeler clone() sur Java MessageDigest copiera l'état actuel de la fonction de hachage. Vous pouvez l'utiliser pour construire votre hash partiel à partir des caractères connus, puis créer un clone pour chaque proposition. Cela suppose que l'implémentation MD5 supporte réellement le clonage. Il y a une chance (en fonction de la langue et de la bibliothèque que vous utilisez) que vous ayez à écrire votre propre implémentation MD5.


Notez que la taille du bloc de MD5 est 512 bits (64 caractères), et la longueur de votre mot de passe (un million) est un multiple entier de cela. Cela signifie que vos caractères de mot de passe rempliront complètement le dernier bloc de données, et la fonction de hachage aura besoin d'un bloc supplémentaire pour le remplissage. Ainsi, vous précalculez le hash partiel des 999 936 premiers caractères que vous connaissez, puis vous produisez le bloc de données final parmi les 56 caractères restants que vous connaissez plus les 8 que vous devinez, puis ajoutez le bloc de remplissage après cela.

Une implémentation comme Java MessageDigest devrait prendre soin des détails de la division des choses en blocs, cependant. Vous pouvez probablement (encore une fois, je n'ai pas testé) il suffit de créer un MessageDigest, appelez digest(byte[]) avec vos 999 992 octets connus, puis appelez clone().

+0

Mais je n'ai pas beaucoup de temps et j'ai besoin de brute seulement 1 mot de passe. Y a-t-il des programmes ou des bibliothèques qui peuvent le faire? – michaeluskov

+0

Pas que je sache, mais je n'ai jamais regardé. Ce site est sur la programmation, pas de mot de passe, donc je réponds à votre question de programmation, pas votre besoin de casser un mot de passe. – Wyzard

+0

J'ai essayé de hacher 999936 symboles, hacher 64 symboles (8 derniers chiffres = 0), puis ajouter chaque 8 octets de premier hachage à chaque 8 octets de la seconde. La réponse ne correspond pas à un hachage de 1 million de mots de passe. – michaeluskov