9
votes

Comment déchiffrer la chaîne Sha1-cryptée en Java

est-il possible de déchiffrer une chaîne qui était plus tôt cryptée avec l'algorithme SHA-1 en Java?


3 commentaires

SHA-1 est un hachage, pas un algorithme de cryptage. Si vous essayez d'extraire une chaîne de son hachage SHA-1, bonne chance. Cela s'appelle une attaque pré-image.


C'est possible , mais nécessiterait des ressources et du temps de calcul, car les données SHA1-cryptées ne sont pas censées être déchiffrées une fois cryptées.


Je pense que la question devrait être à quel point il est essentiel de décrypter SHA1. Qu'est-ce que Java a à voir avec ça? Si vous avez un bon algorithme, vous pouvez utiliser n'importe quelle langue pour le coder.


3 Réponses :


12
votes

SHA1 est un Fonction de hachage cryptographique , et tout le point est que vous ne pouvez pas défaire. S'il était possible d'inverser le hachage (trouvez l'entrée pour un hachage donné), il ne serait pas utile. Si vous avez besoin de chiffrer quelque chose et de le déchiffrer plus tard, vous devez utiliser un Fonction de cryptage comme AES ou RSA .

Toutefois, pour des entrées très simples, il peut être possible de Casser la fonction de hachage en devinant à quoi l'entrée était et vérifie si le hachage est identique. p>

Exemple de code Python: P>

def crack_hash(hash_to_crack, hash_function, list_of_guesses):
    # Try to hash everything in our guess list
    for guess in list_of_guesses:
        new_hash = hash_function(guess)
        # if the hashes match, we found it
        if new_hash == hash_to_crack:
            return guess
    # If none of them match, give up
    return None


2 commentaires

Cette méthode nécessiterait des quantités obscènes d'espace et de temps avec une liste raisonnablement de taille. Une alternative plus pratique consiste à utiliser un table arc-en-ciel afin d'appliquer un comprimé de mémoire temporelle. Cette méthode est inutile pour les hachages salés, bien que


@jsvk - Je ne dis pas que c'est une bonne idée. En fait, j'espérais que l'exemple illustrerait à quel point il est inutile que vous ayez une bonne idée de quoi deviner. Il pourrait être amélioré, mais de manière réaliste, personne n'utilise son propre biscuit de mot de passe - et certainement pas un écrit en python;)



2
votes

Non, ce n'est pas possible, car Sha-1 est un hash - c'est un billet aller simple. Si vous souhaitez crypter et déchiffrer une chaîne, vous devez utiliser un algorithme de cryptage qui utilise la clé pour générer des données cryptées. Ensuite, vous pouvez chiffrer des données et après la déchiffrer avec succès. Par exemple AES. Vous pouvez lire sur AES depuis ici


0 commentaires

2
votes

Réponse courte: c'est impossible.

Parce que SHA-1 est un Fonction de hachage cryptographique , par le principe du pigeonhole, il est mathématiquement impossible à inverser. Il n'y a que 2 160 SHA-1 possibles. Comme il existe un nombre infini de chaînes d'entrée possibles, il doit y avoir des collisions (multiples entrées de la même valeur). En général, il n'y a aucun moyen de savoir laquelle de ces chaînes était l'entrée originale.

Cependant, les cordes du monde réel ne sont pas complètement arbitraires. Si vous connaissez des informations sur votre chaîne d'entrée (par exemple, il était inférieur à 5 caractères), avec une probabilité élevée, l'entrée est unique. Malheureusement pour vous, les fonctions de hachage comme SHA-1 sont intentionnellement infaissibles d'inverser. (Il y a des attaques théoriques sur SHA-1, mais je ne pense pas qu'aucun n'est actuellement considéré comme presque faisable.)

Donc, si vous devez récupérer des données hachées, vous devez utiliser une force brute: essayez chaque chaîne de longueur de longueur inférieure à n et voyez si le hachage correspond. Mais il y a de nombreuses cordes de longueur jusqu'à n , donc cela devient rapidement infaisable.

Il existe un moyen possible de récupérer des données hachées avant la fin de l'univers . Votre seul espoir est d'utiliser une méthode plus sophistiquée, telle que Tables arc-en-ciel . Ceci seul fonctionne si vous savez que votre chaîne d'origine était très courte (moins de 15 caractères). Même pour les cordes courtes, cela prendra une longue période (et des gigaoctets d'espace disque) pour pré-calculer la table.


2 commentaires

Merci de mettre à jour: il est très bien possible, j'ai juste besoin de l'algorithme. SHA1-Decrypter est le lien vers la page où vous pouvez trouver le Decrypter en ligne


@VineEtverma: Ce n'est pas un décrypte; C'est une recherche inversée. Le code qu'il utilise est essentiellement, mappe Recherche = nouveau hashmap (); / * Ajoutez des entrées communes * /; retour lookup.get (sha1sum); . Cela ne fonctionnera que s'ils avaient ajouté l'entrée que vous recherchez sur la carte.