X-Git-Url: http://gitweb.pimeys.fr/?p=NK2015_Client_Python_Alpha.git;a=blobdiff_plain;f=rsa_source%2FmonRSA.py;fp=rsa_source%2FmonRSA.py;h=b209517da6a611c01054f1a6a45db467facc45e2;hp=0000000000000000000000000000000000000000;hb=76e06d82c94bcb814b95419c7faaeacf4beb0155;hpb=d621c5224a44dc20bc2aaf661954fd1df65dd147 diff --git a/rsa_source/monRSA.py b/rsa_source/monRSA.py new file mode 100644 index 0000000..b209517 --- /dev/null +++ b/rsa_source/monRSA.py @@ -0,0 +1,70 @@ +# -*- coding:utf8 -*- + +import rsa + +import base64 + + + +def lit(fi): + f=open(fi,"r") + a=f.read() + f.close() + return a + + +def decoupe(s,taille): + l=[] + tranche=s[0:taille] + ind=0 + while tranche!='': + l.append(tranche) + ind+=1 + tranche=s[ind*taille:(ind+1)*taille] + return l + +def crypte(message,pub): + """Crypte le message, même si il est est trop long. + sort une chaîne b64-encodée avec les sauts de lignes à chaque découpage""" + # NB : ici, trop long veut dire >245, + # en vrai je sais pas comment on fait pour savoir + vraimessage=decoupe(message,245) + out=[] + for i in vraimessage: + lignecrypt=rsa.encrypt(i,pub) + out.append(base64.b64encode(lignecrypt)) + return "\n".join(out) + +def decrypte(message,priv): + """Décrypte un long message, en prenant en entrée des lignes de b64""" + out=[] + vraimessage=message.split('\n') + for i in vraimessage: + lignecrypt=base64.b64decode(i) + out.append(rsa.decrypt(lignecrypt,priv)) + return "".join(out) + + + + + +def litcles(privfile,pubfile): + priv,pub=None,None + if privfile!=None: + futurpriv=lit(privfile) + priv=rsa.PrivateKey.load_pkcs1(futurpriv) + if pubfile!=None: + futurpub=lit(pubfile) + pub=rsa.PublicKey.load_pkcs1(futurpub) + return priv,pub + + +if __name__=="__main__": + priv,pub=litcles(privfile,pubfile) + message = raw_input("Entrez un message :") + print "message avant :\n%s\n"%(message) + message = crypte(message,pub) + print "message crypté (avec la clé publique) :\n%s\n"%(message) + message = decrypte(message,priv) + print "message crypté décrypté :\n%s\n"%(message) +