se añadieron diccionarios del tipo siguiente tipo
>>diccionario={"hola":"que fue",0:"cero""A":"letra A"}
>>print diccionario["A"]
"letra A"
>>print diccionario[0]
"cero"
para el abecedario y la palabra clave teniendo mas de una que puede ser escogida aleatoriamente o segun su clave en el diccionario
import random
letras_diccionario={0:'A',1:'B',2:'C',3:'D',4:'E',5:'F',6:'G',7:'H',8:'I',9:'J',10:'K',11:'L',12:'M',13:'N',14:'O',15:'P',16:'Q',17:'R',18:'S',19:'T',20:'U',21:'V',22:'W',23:'X',24:'Y',25:'Z',26:'1', 27:'2', 28:'3', 29:'4', 30:'5', 31:'6', 32:'7', 33:'8', 34:'9', 35:'0',36:' '}
palabra_clave={"facebook":"nadie es perfecto y yo soy nadie","correo":"la unica lucha que verdaderamente se pierde es la que se abandona","notas":"la casa es de todos","programas":"qwerty ytrewq danny ynnad"}
def codificacion(palabra_clave,mensaje):
mensaje_codificado=" "
mensaje=mensaje.upper()
palabra_clave=palabra_clave.upper()
longitud=len(mensaje)
longitud_clave=len(palabra_clave)
palabra_clave=palabra_clave*int(longitud/longitud_clave+1)
for i in range(longitud):
inicial=palabra_clave[i]
letra_quiero=mensaje[i]
#inicial='Y'
#letra_quiero='P'
mensaje_codificado+=vigerene(inicial,letra_quiero)
return mensaje_codificado.lstrip() #Quita el espacio del comienzo
def vigerene(a1,a2,opcion=0):
#a1 letra de la palabra clave y a2 la letra real
inicial=letra_numero(a1)
letra_quiero=letra_numero(a2)
letras=letras_diccionario.values() #genera la lista de valores
letras1=letras[inicial:]+letras[:inicial]
if opcion==0:
return letras1[letra_quiero]
else:
return letras1
def recuperar_virgerene(palabra_clave,mensaje_codificado):
mensaje_original=" "
letras=letras_diccionario.values() #genera la lista de valores
pocision_original=0
longitud=len(mensaje_codificado)
longitud_clave=len(palabra_clave)
palabra_clave=palabra_clave.upper()*int(longitud/longitud_clave+1)
for i in range(longitud):
inicial=palabra_clave[i]
letra_resultado=mensaje_codificado[i]
letras1=vigerene(inicial,'Z',opcion=1) #pongo uno ya que no tiene importancion
pocision_original=letras1.index(letra_resultado)
mensaje_original+=letras[pocision_original]
return mensaje_original.lstrip() #Quita el espacio del comienzo
#ord de numero a letra son comandos
#chr de letra a numero son comandos
def letra_numero(letra):
clave=letras_diccionario.values()
return clave.index(letra)
def numero_letra(numero):
return letras_diccionario[numero]
def ciclo_pista (valor_a_probar,numero):
pista="36A81"
aux=333
valor_a_probar1=valor_a_probar
while len(str(aux))>1:
aux=0
for i in range(len(valor_a_probar1)):
aux=aux+int(valor_a_probar1[i])
valor_a_probar1=str(aux)
if aux==numero:
pista=valor_a_probar
else:
valor_a_probar="%05d" % random.randint(1,99999)
pista=ciclo_pista(valor_a_probar,numero)
return pista
def generar_pista(numero):
#buscar una manera de generar un numera de 5 digitos que sumandos
#todos sus digitos hasta tener un digito sea igual a la variable numero
#sin contar el cero
pista="36A81"
if numero==0:
pista="36A81"
else:
valor_a_probar="%05d" % random.randint(1,99999)
pista=ciclo_pista(valor_a_probar,numero)
return pista
def verificar_pista(valor_a_probar):
if valor_a_probar!="36A81":
aux=333
valor_a_probar1=valor_a_probar
while len(str(aux))>1:
aux=0
for i in range(len(valor_a_probar1)):
aux=aux+int(valor_a_probar1[i])
valor_a_probar1=str(aux)
else:
aux=0
return aux
def ingreso_mensaje():
mensaje=raw_input("Ingrese el mensaje: ")
#mensaje="hola como?"
mensaje_alter=mensaje.split()
mensaje=" "
for i in range(len(mensaje_alter)):
#Signo de puntuacion para ser quitados
mensaje_alter[i]=mensaje_alter[i].rstrip("?")
mensaje_alter[i]=mensaje_alter[i].lstrip("?")
mensaje_alter[i]=mensaje_alter[i].rstrip(".")
mensaje_alter[i]=mensaje_alter[i].lstrip(".")
mensaje_alter[i]=mensaje_alter[i].rstrip(",")
mensaje_alter[i]=mensaje_alter[i].lstrip(",")
mensaje_alter[i]=mensaje_alter[i].rstrip(":")
mensaje_alter[i]=mensaje_alter[i].lstrip(":")
mensaje_alter[i]=mensaje_alter[i].rstrip('"')
mensaje_alter[i]=mensaje_alter[i].lstrip('"')
mensaje_alter[i]=mensaje_alter[i].rstrip("!")
mensaje_alter[i]=mensaje_alter[i].lstrip("!")
mensaje_alter[i]=mensaje_alter[i].rstrip("$")
mensaje_alter[i]=mensaje_alter[i].lstrip("$")
mensaje_alter[i]=mensaje_alter[i].rstrip(")")
mensaje_alter[i]=mensaje_alter[i].lstrip(")")
mensaje_alter[i]=mensaje_alter[i].rstrip("(")
mensaje_alter[i]=mensaje_alter[i].lstrip("(")
mensaje+=mensaje_alter[i]+" "
mensaje=mensaje.lstrip()
mensaje=mensaje.rstrip()
return mensaje
def main():
clave=palabra_clave.values()
mensaje=ingreso_mensaje()
valor_tabla=random.randint(0,len(clave)-1) # genera aleatoriamente cualquiera de las llaves privadas
#valor_tabla=clave.index(palabra_clave["facebook"]) #una escoje alguna de las llaves privadas segun su clave de diccionario
pista=generar_pista(valor_tabla)
#el primer par dice que clave utilizo
#Codificacion
print "Mensaje: ",mensaje.upper()
resultado=codificacion(clave[valor_tabla],mensaje)
resultado=resultado.lstrip()
resultado1=pista+" "+resultado
print "resultado: ", resultado1
#recuperacion
valor_tabla=verificar_pista(resultado1[:5])
mensaje_original=recuperar_virgerene(clave[valor_tabla],resultado1[6:])
print "Decodificado: ",mensaje_original
print "Correcto?:", mensaje_original==mensaje.upper()
return 0
if __name__ == '__main__':
main()
Descargar codigo
No hay comentarios:
Publicar un comentario
$ apt-get install comentarios