Files
TermNSI/Sécurité/exemples/chiffrement_rsa.py

67 lines
1.9 KiB
Python
Raw Normal View History

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Wed Feb 3 12:41:14 2021
@author: pjoulaud
"""
CLE_PRIV_P = 53
CLE_PRIV_Q = 97
CLE_PUB_E = 7
CLE_PUB_N = CLE_PRIV_P * CLE_PRIV_Q
def conversion_message_en_nombre(chaine, bloc=3):
nombre = ""
for i in chaine :
nombre += str(ord(i)-ord('A')+1)
#print(nombre)
while len(nombre)%bloc != 0 :
nombre = '0' + nombre
return nombre
def chiffrement(chaine_num, bloc=3, e=CLE_PUB_E, n=CLE_PUB_N):
code = ""
for i in range(len(chaine_num)//bloc):
morceau_chaine_num = chaine_num[i*bloc:(i+1)*bloc]
#print(morceau_chaine_num)
morceau_chaine_num = int(morceau_chaine_num)
morceau_chaine_num = morceau_chaine_num**e
morceau_chaine_num = morceau_chaine_num%n
morceau_chaine_num = str(morceau_chaine_num)
code += morceau_chaine_num
code += ' '
return code[:-1]
def dechiffrement(chaine_num, bloc=2, e=CLE_PUB_E, n=CLE_PUB_N, p=CLE_PRIV_P, q=CLE_PRIV_Q):
nombre = 1
while nombre%e != 0 :
nombre += (p-1)*(q-1)
print(nombre)
d = nombre//e
liste_num = chaine_num.split(' ')
print(liste_num)
liste_decod = []
for i in liste_num :
decode = (int(i)**d) % n
liste_decod.append(str(decode))
print(liste_decod)
chaine_decode = ''.join(liste_decod)
print(chaine_decode)
message = ""
a_completer = len(chaine_decode)%bloc
for i in range(a_completer):
chaine_decode = '0' + chaine_decode
for i in range(len(chaine_decode)//bloc):
morceau_chaine_num = int(chaine_decode[i*bloc:(i+1)*bloc])
message += chr(morceau_chaine_num+ord('A')-1)
print(morceau_chaine_num, ' ',message)
return message
ma_chaine_num = conversion_message_en_nombre('BONJOUR')
print(ma_chaine_num)
mon_code = chiffrement(ma_chaine_num)
print(mon_code)
mon_message = dechiffrement(mon_code)
print('message : ', mon_message)