#!/usr/bin/env python
from sys import argv
from gcd import gcd
from utilMath import rprime, inversa, pickone, potmod, prime
# <- Codigo tomado de http://goo.gl/92dXd <<Introduccion a la Criptografia Moderna>>
def cifrar(m):
chipertext = 0
for c in m:
chipertext <<= 8
chipertext += ord(c)
return chipertext
def decifrar(c):
mensaje = []
while c > 0:
mensaje.insert(0, chr(c & 255))
c >>= 8
return \'\'.join(mensaje)
# Fin de codigo !->
def D(c,(d,n)):
return potmod(c,d,n)
def E(m, (e, n)):
return potmod(m,e,n)
def generarClaves(d):
p = rprime(d)
q = rprime(d)
n = p * q
phin = (p-1) * (q-1)
while True:
e = pickone(phin)
if gcd(phin, e) == 1:
break
d = inversa(e, phin)
return ((e, n), (d, n))
def genKey(longitud):
(publica, privada) = generarClaves(longitud)
pub = open(\'rsa.pub\', \'w\')
priv = open(\'rsa.priv\', \'w\')
for i in range(len(publica)):
pub.write(str(publica[i])+\'\\n\')
priv.write(str(privada[i])+\'\\n\')
return
def getKeyFromFile(archivo):
f = open(archivo, \'r\')
e = int(f.readline())
n = int(f.readline())
return (e, n)
if __name__==\'__main__\':
m = \'\'
tipo = False
try:
if len(argv) > 0:
for i in range(1,len(argv),2):
if argv[i].lower() == \'--genkey\':
genKey(int(argv[i+1]))
elif argv[i].lower() == \'-m\':
m = argv[i+1]
elif argv[i].lower() == \'-e\':
tipo = True
elif argv[i].lower() == \'-d\':
tipo = False
elif argv[i].lower() == \'--help\':
print \'Finjamos que escribi la ayuda :P\'
else:
print \'O_o no se a que te refieras con %s\' %argv[i]
if tipo:
public = getKeyFromFile(\'rsa.pub\')
print E(cifrar(m), public)
else:
private = getKeyFromFile(\'rsa.priv\')
print decifrar(D(int(m), private))
except:
print \'error 000x34 ... -.- si el codigo es inventado pero de todas formas checa la ayuda --help\'