Comparaison de chaîne de caractère cryptée et hashée

cs_lilj Messages postés 203 Date d'inscription dimanche 13 décembre 2009 Statut Membre Dernière intervention 1 avril 2012 - 27 janv. 2011 à 08:15
cs_lilj Messages postés 203 Date d'inscription dimanche 13 décembre 2009 Statut Membre Dernière intervention 1 avril 2012 - 28 janv. 2011 à 09:42
bonjour,
voila je ne comprend pas pourquoi mes chaines sont reconnues comme différentes alors qu'elles apparaissent identiques dans mes msgbox.
Voici mon mode opératoire (non optimisé):
dim machaine as string = "test"
'Hashage
machaine = hash(machaine) ' Fonction qui me renvoi ma chaine hashé en SHA256
'Cryptage (classe trouvé sur VBFrance)
dim crypto as New ElgAESCrypt("maclé")
machaine =crypto.EncrypterChaine(machaine) ' Méthode qui renvoie ma chaine cryptée avec la clé de l'objet
'Ecriture  de ma chaine cryptée dans un fichier ini
'....
'Lecture du fichier ini et récupération de ma chaine cryptée
'retour contient ma chaine cryptée après lecture du fichier ini
dim decrypto as New ElgAESCrypt("maclé") 'La même clé
retour =decrypto.DecrypterChaine(retour) 'Logiquement ici retour est ma chaine version hashé
'Comparaison
if hash("test") = retour then
msgbox("ok")
else
msgbox("erreur")
endif

devinez quoi ? ben pour lui c'est pas la même chaine du coup j'ai :
Erreur !!

Je ne comprend pas..
Merci pour votre aide.

9 réponses

cs_lilj Messages postés 203 Date d'inscription dimanche 13 décembre 2009 Statut Membre Dernière intervention 1 avril 2012 5
27 janv. 2011 à 09:01
Alors, chose que je comprends encore moins c'est que :
decrypto.DecrypterChaine(retour).lenght = 49
or le hash(machaine).lenght = 44
lorsque que je fais (avant de comparer):
retour = decrypto.DecrypterChaine(retour).Remove(44, 5)
tout fonctionne.
et si je fais msgbox(decrypto.DecrypterChaine(retour).substring(44,5))
je reçois un msgbox vide !!!
Je cherche un explication rationnelle à cela !!
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
27 janv. 2011 à 09:04
Salut

Es-tu sûr que le résultat 'machaine' de ton cryptage soit une chaine composée de caractères dits 'imprimables' et sauvegardables dans un fichier INI ?

As-tu fait l'essai de tester tes algos en recopiant 'machaine' dans 'retour' (sans passer par le fichier INI) ?

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
cs_lilj Messages postés 203 Date d'inscription dimanche 13 décembre 2009 Statut Membre Dernière intervention 1 avril 2012 5
27 janv. 2011 à 10:58
c'est à dire remplace mon if par :
if decrypto.DecrypterChaine(crypto.EncrypterChaine(hash("test"))) = hash("test") then
toujours erreur !!
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
27 janv. 2011 à 13:17
Non, je pensais simplement à affecter à 'retour' la valeur de 'machaine' cryptée.
C'est à dire, tenter de décrypter la chaine sans intermédiaire, pour savoir si c'est cet manip intermédiaire qui perturbe.

machaine =crypto.EncrypterChaine(machaine)
retour = machaine
dim decrypto as New ElgAESCrypt("maclé")
retour =decrypto.DecrypterChaine(retour)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_lilj Messages postés 203 Date d'inscription dimanche 13 décembre 2009 Statut Membre Dernière intervention 1 avril 2012 5
27 janv. 2011 à 16:40
j'ai essayé mais c'est le meme resultat. Je pense qu'il n'est pas recommandé de crypter un hash.. Ou le mode de cryptage utilisé ne permet pas de crypté un hash. Ce qui parait bizard vu qu'il s' agit un genre de système de Securite hybrid.
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
27 janv. 2011 à 17:32
D'après ce que j'ai vu, ElgAESCrypt est une classe "maison"
Es-tu sûr de son fonctionnement ?
Qu'en est-il de "hash" ?
0
cs_lilj Messages postés 203 Date d'inscription dimanche 13 décembre 2009 Statut Membre Dernière intervention 1 avril 2012 5
28 janv. 2011 à 07:42
Alors, concernant le fonctionnement, il me semble que tout va plus ou moins bien, je l'ai utilisé une fois pour pouvoir crypter et décrypter une chaine, et je retrouve la même chaine après décryptage (tout cela sans passé par un hashage) Quid au "hash" le voici :
Public Function hash(ByVal StringToHash As String) As String
        Dim myEncoder As New System.Text.UTF32Encoding
        Dim Key() As Byte = Convert.FromBase64String("macle")
        Dim XML() As Byte = myEncoder.GetBytes(StringToHash)
        Dim myHMACSHA256 As New System.Security.Cryptography.HMACSHA256(Key)
        Dim HashCode As Byte() = myHMACSHA256.ComputeHash(XML)
        Return Convert.ToBase64String(HashCode)
    End Function
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
28 janv. 2011 à 09:28
Désolé, je n'y connais rien en hash, crypto and Co
A priori, le Hash d'une même chaine avec la même clé doit toujours donner le même résultat.
Il faudrait trouver un autre logiciel|exemple de hashage et comparer les résultats avec cette fonction.
0
cs_lilj Messages postés 203 Date d'inscription dimanche 13 décembre 2009 Statut Membre Dernière intervention 1 avril 2012 5
28 janv. 2011 à 09:42
Oui, j'ai trouvée une alternative mais elle n'est pas trop optimisé :
if decrypto.encrypter(hash("test")) = retour then 'retour contient la chaine crypté du fichier ini.
msgbox("ok")
else
msgbox("erreur")
endif

Dans ce cas, tout fonctionne mais je ne vois plus l'utilité de crypté la chaine ^^. Autant stocké le hash dans le fichier ini. Mais bon.

merci à toi.
0
Rejoignez-nous