]> gitweb.pimeys.fr Git - NK2015_Client_Python_Alpha.git/blobdiff - 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
diff --git a/rsa_source/monRSA.py b/rsa_source/monRSA.py
new file mode 100644 (file)
index 0000000..b209517
--- /dev/null
@@ -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)
+