IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Sécurité Java Discussion :

MD5 conversion inverse


Sujet :

Sécurité Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 7
    Par défaut MD5 conversion inverse
    Bonjour,

    comment faire l'inverse de :

    byte hashCode[] = null;
    StringBuffer encryptedValue = new StringBuffer();
    md.update(stringToEncrypt.getBytes());
    hashCode = md.digest();
    for(int i = 0; i < hashCode.length; i++)
    encryptedValue.append(hashCode[i]);

    String returnString = encryptedValue.toString();

    exemple de resultat : pour Test01
    j'obtiens : 651E73B8A18B69F3223289DD636D8056 (une fois convertie en Hex "lisible" )
    et : 10130115-72-95-117105-133450-119-3599109-12886 (pour return String)

    Bref comment faire lorsque j'ai le string 10130115-72-95-117105-133450-119-3599109-12886 pour retomber sur 651E73B8A18B69F3223289DD636D8056

  2. #2
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2007
    Messages : 77
    Par défaut
    Je ne veux pas dire de bêtise, mais est qu'il est possible d'inverser MD5? Je veux dire hormis par force brute, MD5 n'est pas un algorithme non-réversible?

  3. #3
    Nouveau membre du Club
    Inscrit en
    Janvier 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 7
    Par défaut MD5 pas reversible
    je suis ok avec toi c'est pas reversible.

    mais là mon probleme c'est que je sors le resultat sous deux formes différentes et que j'aimerai bien avoir quelque chose pour passer de l'une à l'autre et reciproquement

  4. #4
    Nouveau membre du Club
    Inscrit en
    Janvier 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 7
    Par défaut complement
    je complete :

    1. j'utilise
    byte hashCode[] = null;
    StringBuffer encryptedValue = new StringBuffer();
    md.update(stringToEncrypt.getBytes());
    hashCode = md.digest();
    for(int i = 0; i < hashCode.length; i++)
    encryptedValue.append(hashCode[i]);

    String returnString = encryptedValue.toString();

    qui me donne : 10130115-72-95-117105-133450-119-3599109-12886

    2. puis
    HexUtil2 hexUtil = new HexUtil2();
    System.out.println("md.update en byte : " + hexUtil.byteArrayToHexString(hashCode));

    qui me donne :651E73B8A18B69F3223289DD636D8056


    detail de HexUtil2 :
    public class HexUtil2 {
    private final static char[] CHARS = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
    /**
    * Convert a byte[] array to readable string format. This makes the "hex" readable!
    * @return result String buffer in String format
    * @param in byte[] buffer to convert to string format
    */
    public static String byteArrayToHexString(byte in[]) {
    byte ch = 0x00;

    if (in == null || in.length <= 0) {
    return "";
    }

    StringBuffer out = new StringBuffer(in.length * 2);

    for (int i = 0; i < in.length; i++) {
    ch = (byte) (in[i] & 0xF0); // Strip off high nibble
    ch = (byte) (ch >>> 4); // shift the bits down
    ch = (byte) (ch & 0x0F); // must do this is high order bit is on!

    out.append(CHARS[ (int) ch]); // convert the nibble to a String Character
    ch = (byte) (in[i] & 0x0F); // Strip off low nibble
    out.append(CHARS[ (int) ch]); // convert the nibble to a String Character
    }

    return out.toString();
    }
    }

    la variable hash est la même.
    Comment faire pour passer de 1 à 2 ?

  5. #5
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2007
    Messages : 77
    Par défaut
    Il suffit juste de convertir de décimal a hexadécimal bit par bit les valeurs du String. La difficulté sera de savoir si l'on doit prendre un, deux ou trois digits.

  6. #6
    Expert confirmé
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 419
    Par défaut
    En clair tu veux une fonction HexStringTobyteArray() dans ta classe HexUtil2 ?

    Au fait la variable String encryptedValue est vraiment mal nommée. Il ne s'agit pas de chiffrement mais d'empreinte numérique.

  7. #7
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par jojo le haricot Voir le message
    Bref comment faire lorsque j'ai le string 10130115-72-95-117105-133450-119-3599109-12886 pour retomber sur 651E73B8A18B69F3223289DD636D8056
    Ce n'est pas possible vu la manière dont t'a généré ta sting. C'est une suite de bytes écrit en décimal et mis bout à bout sans séparateur. Quand tu lit
    10130115-72-95-117105-133450-119-3599109-12886 comment tu fait pour savoir si c'est
    101 30 115 -72 -9 5 -1 17 105 -13 34 50 -11 9 -3 5 99 10 9 -128 86
    ou si c'est
    10 1 30 11 5 -72 -95 -117 10 5 -1 33 4 50 -119 -35 99 109 -12 8 86
    Pas possible, il aurait fallu mettre des séparateur pour pouvoir parser la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for(int i = 0; i < hashCode.length; i++)
    encryptedValue.append(hashCode[i]).append(",");

  8. #8
    Nouveau membre du Club
    Inscrit en
    Janvier 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 7
    Par défaut le probleme est que
    le probleme est que je ne sais pas et qu'il n'y a pas de "logique".
    j'ai fais plusieurs tests mis à par que tout ceci n'est qu'une concaténation, on ne peut pas prédire si c'est 1, 2 ou 3 caractères ...

    en faisant une boucle, on doit pouvoir découper cette String, pouvoir avoir finalement plusieurs trucs qui pourrait correspondre
    ex : 10130115

    peut etre 101 30 115
    ou 101 301 15
    ou ... 10 130 115
    etc...

    sachant qu'à priori ca ne peut pas commencer par 0 (selon moi)

    qu'en pensez-vous ?

  9. #9
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    que c'est des emmerde pour pas grand chose. Tu pourra arriver à réduire le nombre de combinaisons possible en tenant compte de contraintes (un - commence un nombre, un nombre est entre Byte.MAX_VALUE et Byte.MIN_VALUE), mais après, tu ne saura pas pour autant laquelle des combinaison est la bonne .Stocke tes MD5 correctement (hexa) plutot que sous cette horreur.

  10. #10
    Nouveau membre du Club
    Inscrit en
    Janvier 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 7
    Par défaut ok mais
    ok avec toi, c'est pas stocké proprement mais il faut que j'en récupere et ils sont stockés comme ça ...

    tu n'aurais pas dans ta besace un petit bout de code qui pourrait m'aider ...

  11. #11
    Nouveau membre du Club
    Inscrit en
    Janvier 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 7
    Par défaut laisse tombé
    je clos la discussion ...

    vu la tête des autres strings , j'abandonne ....

    merci en tout cas pour tes eclairages.

    bonne journée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. chaine=>md5 et inversement?
    Par erox44 dans le forum Langage
    Réponses: 1
    Dernier message: 09/04/2008, 10h26
  2. [Dates] Conversion date en chaine et inversement...
    Par blescouet dans le forum Langage
    Réponses: 2
    Dernier message: 09/02/2006, 10h25
  3. [Java]Conversion de float en String et inversement
    Par djoukit dans le forum Langage
    Réponses: 7
    Dernier message: 13/10/2005, 11h55
  4. [Debutant(e)]conversion int to byte[] et inversement
    Par mune dans le forum Général Java
    Réponses: 23
    Dernier message: 21/07/2005, 14h47
  5. [C#] Conversion d'un string en byte[] et inversement
    Par david71 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 21/12/2004, 15h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo