Advertisement
bilelh

Untitled

Feb 12th, 2021
666
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.60 KB | None | 0 0
  1. import numpy as np
  2. Lettres = 'ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ'
  3. Minuscules = Lettres.lower()
  4.  
  5. def enNombres(sms):
  6.     trad = []
  7.     for lettre in sms:
  8.         if lettre in Lettres:
  9.             num = Lettres.find(lettre)
  10.             trad.append(num+1)
  11.         elif lettre in Minuscules:
  12.             num = Minuscules.find(lettre)
  13.             trad.append(num+1)
  14.         else:
  15.             trad.append(0)
  16.     return trad
  17.    
  18.    
  19. def enLettres(tab):
  20.     #Le message est toujours en majuscule
  21.     #Comme il n'y a pas de distinction entre maj et min dans le dico proposé
  22.     smsfinal = ''
  23.     for num in tab:
  24.         if num==0:
  25.             smsfinal+=' '
  26.         else:
  27.             smsfinal+=Lettres[num-1]
  28.     return smsfinal    
  29.  
  30. def afficheCode(tab):
  31.     smscrypte = ''
  32.     for num in tab:
  33.             smscrypte+=str(num)
  34.             #separateur utile pour le decodage
  35.             smscrypte+='.'            
  36.     return smscrypte[:-1]
  37.  
  38.    
  39.    
  40.  
  41. sms='ISET Djerba'
  42. code=enNombres(sms)
  43. ##longueur de la chaine
  44. L= len(code)
  45. ##Pour effectuer le redimensionnement
  46. M=L//3
  47. ##Nombre d'éléments Manquants
  48. Man=L%3
  49. if Man>0:
  50.     for i in range(1,Man):
  51.         code+='0'
  52.         divi=M+1
  53. elif Man==0:
  54.    divi=M
  55.  
  56. encrypt = np.asarray(code).astype('int')
  57. Matsecret= np.array([[13, -8, -12], [12, -7, -12], [6, -4, -5]] )
  58.  
  59. print('Le message d\'origine:',sms)
  60.  
  61. #print('Le message Encodé:',enNombres(sms))
  62. Matsms = encrypt.reshape(divi, 3).transpose()
  63. print('La matrice message:',Matsms)
  64.  
  65. Matprod=Matsecret.dot(Matsms)
  66.  
  67. print('La matrice secrète:',Matsecret)
  68. print('La matrice produit:',Matprod)
  69. aligne= np.asarray(Matprod).reshape(-1)
  70. print('Le message chiffré:',afficheCode(aligne))
  71.  
  72.  
  73. #############DECODAGE###################
  74. #Pour verifier le programme on commence avec le message crypté produit auparavant#
  75. # -95.212.-126.18.-85.192.-131.17.-47.100.-50.8
  76.  
  77. print ("Maintenant On Décode")
  78.  
  79. encoded = '-95.212.-126.18.-85.192.-131.17.-47.100.-50.8'
  80. print("Message reçu:",encoded)
  81. liste = encoded.split('.')
  82. newTab=np.asarray(liste).astype(int)
  83. L=len(liste)
  84. M=L//3
  85. #comme on ne connait pas le nombre de caractères initial on refait
  86. #Ici Matsecret est la même et supposée disponible chez le destinataire
  87. newMat=newTab.reshape(3,M)
  88. BaseMat=np.dot(np.linalg.inv(Matsecret),newMat)
  89. #Approche des valeurs vers des entiers avec rint
  90. #On transpose comme on a fait au début
  91. FinalMat=np.rint(BaseMat).transpose()
  92. #On aligne en tableau
  93. FinalTab =np.asarray(FinalMat,dtype='int').reshape(-1)
  94. #On réutilise le dico
  95. Finalsms = enLettres(FinalTab)
  96.  
  97. print(Finalsms)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement