]> gitweb.pimeys.fr Git - NK2015_Client_Python_Alpha.git/blob - rsa_source/monRSA.py
on ajoute le module rsa car le client aussi en a besoin
[NK2015_Client_Python_Alpha.git] / rsa_source / monRSA.py
1 # -*- coding:utf8 -*-
2
3 import rsa
4
5 import base64
6
7
8
9 def lit(fi):
10 f=open(fi,"r")
11 a=f.read()
12 f.close()
13 return a
14
15
16 def decoupe(s,taille):
17 l=[]
18 tranche=s[0:taille]
19 ind=0
20 while tranche!='':
21 l.append(tranche)
22 ind+=1
23 tranche=s[ind*taille:(ind+1)*taille]
24 return l
25
26 def crypte(message,pub):
27 """Crypte le message, même si il est est trop long.
28 sort une chaîne b64-encodée avec les sauts de lignes à chaque découpage"""
29 # NB : ici, trop long veut dire >245,
30 # en vrai je sais pas comment on fait pour savoir
31 vraimessage=decoupe(message,245)
32 out=[]
33 for i in vraimessage:
34 lignecrypt=rsa.encrypt(i,pub)
35 out.append(base64.b64encode(lignecrypt))
36 return "\n".join(out)
37
38 def decrypte(message,priv):
39 """Décrypte un long message, en prenant en entrée des lignes de b64"""
40 out=[]
41 vraimessage=message.split('\n')
42 for i in vraimessage:
43 lignecrypt=base64.b64decode(i)
44 out.append(rsa.decrypt(lignecrypt,priv))
45 return "".join(out)
46
47
48
49
50
51 def litcles(privfile,pubfile):
52 priv,pub=None,None
53 if privfile!=None:
54 futurpriv=lit(privfile)
55 priv=rsa.PrivateKey.load_pkcs1(futurpriv)
56 if pubfile!=None:
57 futurpub=lit(pubfile)
58 pub=rsa.PublicKey.load_pkcs1(futurpub)
59 return priv,pub
60
61
62 if __name__=="__main__":
63 priv,pub=litcles(privfile,pubfile)
64 message = raw_input("Entrez un message :")
65 print "message avant :\n%s\n"%(message)
66 message = crypte(message,pub)
67 print "message crypté (avec la clé publique) :\n%s\n"%(message)
68 message = decrypte(message,priv)
69 print "message crypté décrypté :\n%s\n"%(message)
70