Table des matières

Conversion entre un mot de passe et sa représentation en chaîne hexadécimale

Objectif

Je ne sais pas si c'est le cas général, mais je me suis déjà retrouvé dans la configuration d'un réseau wifi avec le problème suivant:

Par exemple (mais ce n'est pas mon vrai mot de passe, hein ! :-D )

Vous voyez le principe: 'm' → 0x6D, 'a' → 0x61, etc…

Bon, il suffit d'avoir fait cela une seule fois à la main pour comprendre: je veux une fonction qui fait ça automatiquement!

La voilà:

Conversion mot de passe en texte -> chaîne hexa

def mdp2hex(ch):
    """mdp2hex(ch): Convertit en chaîne hexadécimale les mots de passe donnés en texte clair"""
    h=""
    for i in range(0,len(ch)):
        h+=str(hex(ord(ch[i])))[2:].upper().zfill(2)
    return h
 
# exemple d'utilisation:
print mdp2hex('machintruc789')  # affiche: '6D616368696E74727563373839'
print mdp2hex('')  # affiche: ''

Si on vous demande de l'hexa avec A à F en minuscule, il suffit d'enlever le “.upper()”.

Conversion chaîne hexa -> mot de passe en texte

def hex2mdp(ch):
    """hex2mdp(ch): Convertit en texte clair les mots de passe donnés en chaîne hexadécimale"""
    h=""
    for i in range(0,len(ch),2):
        h+=chr(int(ch[i:i+2],16))
    return h
 
print hex2mdp('6D616368696E74727563373839') # affiche: 'machintruc789'
print hex2mdp('')  # affiche: ''

Il faudrait ajouter 2 vérifications de données:

if (len(ch)%2)!=0:
    # => renvoie une erreur
for car in ch:
    if not (car in "0123456789ABCDEFabcdef"):
        # => renvoie une erreur

Vous pouvez essayer tout cela sur ma calculatrice en ligne http://calculext.jpvweb.com