Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import numpy as np
- Lettres = 'ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ'
- Minuscules = Lettres.lower()
- def enNombres(sms):
- trad = []
- for lettre in sms:
- if lettre in Lettres:
- num = Lettres.find(lettre)
- trad.append(num+1)
- elif lettre in Minuscules:
- num = Minuscules.find(lettre)
- trad.append(num+1)
- else:
- trad.append(0)
- return trad
- def enLettres(tab):
- #Le message est toujours en majuscule
- #Comme il n'y a pas de distinction entre maj et min dans le dico proposé
- smsfinal = ''
- for num in tab:
- if num==0:
- smsfinal+=' '
- else:
- smsfinal+=Lettres[num-1]
- return smsfinal
- def afficheCode(tab):
- smscrypte = ''
- for num in tab:
- smscrypte+=str(num)
- #separateur utile pour le decodage
- smscrypte+='.'
- return smscrypte[:-1]
- sms='ISET Djerba'
- code=enNombres(sms)
- ##longueur de la chaine
- L= len(code)
- ##Pour effectuer le redimensionnement
- M=L//3
- ##Nombre d'éléments Manquants
- Man=L%3
- if Man>0:
- for i in range(1,Man):
- code+='0'
- divi=M+1
- elif Man==0:
- divi=M
- encrypt = np.asarray(code).astype('int')
- Matsecret= np.array([[13, -8, -12], [12, -7, -12], [6, -4, -5]] )
- print('Le message d\'origine:',sms)
- #print('Le message Encodé:',enNombres(sms))
- Matsms = encrypt.reshape(divi, 3).transpose()
- print('La matrice message:',Matsms)
- Matprod=Matsecret.dot(Matsms)
- print('La matrice secrète:',Matsecret)
- print('La matrice produit:',Matprod)
- aligne= np.asarray(Matprod).reshape(-1)
- print('Le message chiffré:',afficheCode(aligne))
- #############DECODAGE###################
- #Pour verifier le programme on commence avec le message crypté produit auparavant#
- # -95.212.-126.18.-85.192.-131.17.-47.100.-50.8
- print ("Maintenant On Décode")
- encoded = '-95.212.-126.18.-85.192.-131.17.-47.100.-50.8'
- print("Message reçu:",encoded)
- liste = encoded.split('.')
- newTab=np.asarray(liste).astype(int)
- L=len(liste)
- M=L//3
- #comme on ne connait pas le nombre de caractères initial on refait
- #Ici Matsecret est la même et supposée disponible chez le destinataire
- newMat=newTab.reshape(3,M)
- BaseMat=np.dot(np.linalg.inv(Matsecret),newMat)
- #Approche des valeurs vers des entiers avec rint
- #On transpose comme on a fait au début
- FinalMat=np.rint(BaseMat).transpose()
- #On aligne en tableau
- FinalTab =np.asarray(FinalMat,dtype='int').reshape(-1)
- #On réutilise le dico
- Finalsms = enLettres(FinalTab)
- print(Finalsms)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement