Refactoring de implementation.py [stable~30]
This commit is contained in:
parent
84d1642afe
commit
da4588aaad
|
@ -1,34 +1,49 @@
|
||||||
import random
|
# fonction qui retourne une liste de nombres entre 0 pLength a partir d'un nombre
|
||||||
|
# compris entre 0 et pLength**pLevel
|
||||||
|
def decomposeKey(pNum, pLength, pLevel):
|
||||||
|
xReturn = [];
|
||||||
|
n = pNum
|
||||||
|
for i in range(pLevel-1, -1, -1):
|
||||||
|
xReturn.append( n // (pLength**i) );
|
||||||
|
n -= xReturn[i-pLevel+1] * (pLength**i)
|
||||||
|
return xReturn;
|
||||||
|
|
||||||
def encode(al, key, msg):
|
|
||||||
tmp = '';
|
|
||||||
hash = '';
|
|
||||||
for i in range(0, len(msg)): # parcourt chaque caractere du message
|
|
||||||
tmp = al[1].index( msg[i] );
|
|
||||||
hash += al[len(al)-1][tmp];
|
|
||||||
|
|
||||||
# decale le premier alphabet d'un cran, le deuxieme si le premier depasse
|
# fonction qui retourne le resultat d'une liste pList melangee par un nombre pNum
|
||||||
for i in range(1, len(al)):
|
def shuffle(pList, pNum):
|
||||||
print i;
|
xReturn = []
|
||||||
return hash;
|
l = len(pList)
|
||||||
|
i = pNum % l; # rang actuel
|
||||||
|
n = 0; # nombre d'elements traites
|
||||||
|
while( n < len(pList) ):
|
||||||
|
if( pList[i] != '_' ): # si l'element n'est pas traite
|
||||||
|
xReturn.append( pList[i] ); # on met le caractere dans xReturn
|
||||||
|
pList[i] = '_'; # on met un caractere qui nous indique que l'on a deja traite
|
||||||
|
n += 1; # on met a jour notre indicateur de caracteres traites
|
||||||
|
else: # si l'element est deja traite
|
||||||
|
i += 1
|
||||||
|
i = (i+pNum) % l
|
||||||
|
return xReturn
|
||||||
|
|
||||||
alphabet = [];
|
# fonction qui fait tourner les rotors
|
||||||
alphabet.append( [] )
|
|
||||||
alphabet.append( ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] )
|
|
||||||
alphabet.append( ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] )
|
|
||||||
alphabet.append( ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] )
|
|
||||||
|
|
||||||
for i in range(1, len(alphabet)):
|
|
||||||
random.shuffle( alphabet[i] );
|
|
||||||
alphabet[0].append( alphabet[i][0] );
|
|
||||||
print alphabet[i]
|
|
||||||
print
|
|
||||||
|
|
||||||
code = raw_input("Votre message: ")
|
|
||||||
# demande la saisie des cles (positions initiales)
|
|
||||||
key = [];
|
|
||||||
for i in range(0, len(alphabet)):
|
|
||||||
key.append( raw_input('Cle n%d : ' % (i+1) ) )
|
|
||||||
print
|
|
||||||
|
|
||||||
print encode(alphabet, key, code);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
sigma = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', ' ']
|
||||||
|
userkey = 3*(27**0) + 21*(27**1) + 25*(27**2);
|
||||||
|
level = 3;
|
||||||
|
keymax = len(sigma)**level
|
||||||
|
|
||||||
|
# decomposition de n compris entre 0 et len(sigma)**level
|
||||||
|
key = decomposeKey(userkey, len(sigma), level);
|
||||||
|
|
||||||
|
rotor = [];
|
||||||
|
# on cree les rotors grace a sigma et aux cles recuperees
|
||||||
|
for i in range(0, level):
|
||||||
|
print key[i]
|
||||||
|
rotor.append( shuffle(sigma, key[i]) );
|
||||||
|
print rotor[i]
|
||||||
|
|
Loading…
Reference in New Issue