Forum de mathématiques - Bibm@th.net
Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 11-05-2016 12:44:15
- Cladoo
- Invité
Cryptage réversible
Bonjour,
voilà mon problème : je cherche un algo à implémenter me permettant de crypter 16 caractères numériques en 9 caractères alpha numériques et le fin du fin, ces 9 caractères doivent me permettre de retomber sur les 16 premiers.
Est-ce tout simplement possible ?
Merci
#2 11-05-2016 16:39:13
- Rossignol
- Membre
- Inscription : 19-06-2015
- Messages : 290
Re : Cryptage réversible
Bonjour,
C'est possible ou impossible suivant ce que vous entendez par caractères alphanumériques.
On veut une injection de l'ensemble des mots de 16 caractères d'un alphabet de 10 lettres dans l'ensemble des mots de 9 caractères d'un alphabet de N lettres.
On a donc la condition \(10^{16} \leq N^{9}\)
$$N \geq \sqrt[9]{10^{16}}=10^{\frac{16}{9}}\approx 59,948$$
Il faut donc au moins 60 caractères alphanumériques.
Si on prend les majuscules et les dix chiffres, on obtient 36 caractères : c'est insuffisant.
Si on ajoute les lettres minuscules, on a alors 62 caractères et la condition est remplie.
Une injection évidente est la conversion des nombres écrits en base 10 vers la base 62 :
# Ce que l'on considère comme caractères alphanumériques :
# (on peut supprimer jusqu'à 2 caractères ou bien en ajouter d'autres)
alphanum = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
N = len(alphanum)
def code(num):
"""Codage de num^16 vers alphanum^9"""
num = int(num)
alpha = []
while num:
alpha.append(alphanum[num%N])
num //= N
alpha.extend(['A']*(9-len(alpha))) # on complète à 9 car.
return ''.join(alpha[::-1])
def decode(alpha):
"""Décodage de alphanum^9 vers num^16"""
num = 0
for c in alpha:
num = N*num + alphanum.index(c) # Horner
num = str(num)
num = '0'*(16-len(num))+num # on complète à 16 car.
return num
print(code('1234567890123456')) # affiche 'FojQHiLB2'
print(decode('FojQHiLB2')) # retourne '1234567890123456'
J'ai programmé ça en vitesse ; on doit pouvoir faire plus élégant.
Hors ligne
Pages : 1