1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
|
#! /usr/bin/python
import binascii
#Code pour le principe
#a = raw_input("saisir un mot: ")
#print a
#b = bin(int(binascii.hexlify(a))) #on convertie en binaire
#print b
#c = binascii.unhexlify(str(int(b, 2))) #on convertie en string hexa
#print c
#test effectue avec test/hell
#probleme si message et cle ont une taille differente
def ascii_to_binaire(chaine):
"""
Fonction permettant de convertir une chaine en binaire
"""
binaire=bin(int(binascii.hexlify(chaine),16))
return binaire #chaine contient la conversion de mot en binaire
def binaire_to_ascii(binaire):
"""
Fonction permettant de convertir un binaire en chaine
"""
tmp = "%X" % (int(binaire,2)) #creation d'un hexstring
chaine=binascii.unhexlify(tmp)
return chaine #chaine contient la conversion de mot en binaire
def encode(motbin,clebin):
"""
Fonction permettant de coder une chaine grace a une cle
selon l'algorithme de masque jetable
"""
chaine = "" #chaine est a declarer avant a cause du +=
result = "" #idem
mot_tmp = motbin.split('b')[1]
cle_tmp = clebin.split('b')[1]
for k in range (len(mot_tmp)): #probleme en fonction de la taille du message
chaine+=str(int(mot_tmp[k],2) ^ int(cle_tmp[k],2)) # !!! probleme si taille differente !!!
result+=str(int(chaine[k])%26)
return result
def decode (motbin,clebin):
"""
Fonction permettant de decoder une chaine grace a une cle
selon l'algorithme de masque jetable
"""
chaine = "" #chaine est a declarer avant a cause du +=
result = "" #idem
mot_tmp = motbin
cle_tmp = clebin.split('b')[1]
for k in range (len(mot_tmp)): #probleme en fonction de la taille du message
chaine+=str(int(mot_tmp[k],2) ^ int(cle_tmp[k],2)) # !!! probleme si taille differente !!!
result+=str(int(chaine[k])%26)
return result
if __name__ == "__main__":
"""
Fonction principale du module PYTHON
1-Selection de l'operation
2-Saisie du message et de la cle (encoder ou non) ou sortie
3-Recuperation du message encode ou non
"""
choix = raw_input("Desirez vous encoder(e) ou decoder(d) un message?")
while choix.upper() not in ("Q", "D", "E"):
choix = raw_input("Desirez vous encoder(e) ou decoder(d) un message (quitter:q)?")
if choix.upper() == "E":
mot = raw_input("Entrer votre message:")
cle = raw_input("Entrer la cle:")
motbin= ascii_to_binaire(mot)
clebin= ascii_to_binaire(cle)
result = encode(motbin,clebin)
print "Le message chiffre est: ", result
elif choix.upper() == "D":
motbin = raw_input("Entrer votre message:")
cle = raw_input("Entrer la cle:")
clebin= ascii_to_binaire(cle)
result_tmp = decode(motbin,clebin)
result = binaire_to_ascii('0b'+result_tmp)
print "Le message dechiffre est: ", result
else:
print "Au revoir..." |
Partager