elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Invertir una función en Python.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Invertir una función en Python.  (Leído 3,207 veces)
jam man

Desconectado Desconectado

Mensajes: 32


Ver Perfil
Invertir una función en Python.
« en: 13 Octubre 2015, 00:07 am »

Hola!!!, estoy haciendo un programa en Python de cifrado Polybios, la cuestión es de que ya tengo la primera parte del código que es cifrar una palabra o frase, este es el código:

Código
  1. texto = raw_input ("Palabra a cifrar: ").lower()                                
  2. diccionario = {'a':'aa', 'b':'ab', 'c':'ac', 'd':'ad', 'e':'ae',
  3.               'f':'ba', 'g':'bb', 'h':'bc', 'i':'bd', 'j':'bd',
  4.               'k':'be', 'l':'ca', 'm':'cb', 'n':'cc', 'ñ':'cc',
  5.               'o':'cd', 'p':'ce', 'q':'da', 'r':'db', 's':'dc', 't':'dd',
  6.               'u':'de', 'v':'ea', 'w':'eb', 'x':'ec', 'y':'ed', 'z':'ee'}
  7. textoleet = ''
  8. for v in texto:
  9.        if v in diccionario.keys():
  10.                textoleet += diccionario[v]
  11.        else:
  12.                textoleet += v
  13. print(textoleet)

pero el detalle es hacer lo contrario, que al momento de ingresar una palabra o frase ya cifrada, ahora que lo descifre, ejemplo:

si ingreso "PYTHON", la palabra cifrada seria "ceedddbccdcc" y ahora quiero que haga lo contrario que al ingresar cualquier texto, lo descifre.


En línea

tincopasan


Desconectado Desconectado

Mensajes: 1.286

No es lo mismo conocer el camino que recorrerlo.


Ver Perfil
Re: Invertir una función en Python.
« Respuesta #1 en: 13 Octubre 2015, 16:23 pm »

este tema es un dejavú. ¿es un ejercicio de alguna clase?
bueno, ahora es lo mismo pero lees el valor en lugar de la clave y la cadena cada 2 caracteres:
algo asi:
mientras cadena < que largo de cifrada
             tomar primeros 2 caracteres y buscar valor en diccionario
             limpia = limpia + clave
             sumar 2 caracteres a cifrada
mostrar limpia


En línea

jam man

Desconectado Desconectado

Mensajes: 32


Ver Perfil
Re: Invertir una función en Python.
« Respuesta #2 en: 14 Octubre 2015, 03:10 am »

si es para una materia de Seguridad Informática.
En línea

tincopasan


Desconectado Desconectado

Mensajes: 1.286

No es lo mismo conocer el camino que recorrerlo.


Ver Perfil
Re: Invertir una función en Python.
« Respuesta #3 en: 14 Octubre 2015, 09:36 am »

ok, en base a tu código hice basicamente lo mismo , con una pequeña modificación para descifrar
Código
  1. #-*- coding:utf 8 -*-
  2.  
  3. diccionario = {'a':'aa', 'b':'ab', 'c':'ac', 'd':'ad', 'e':'ae',
  4.               'f':'ba', 'g':'bb', 'h':'bc', 'i':'bd', 'j':'bd',
  5.               'k':'be', 'l':'ca', 'm':'cb', 'n':'cc',
  6.               'o':'cd', 'p':'ce', 'q':'da', 'r':'db', 's':'dc', 't':'dd',
  7.               'u':'de', 'v':'ea', 'w':'eb', 'x':'ec', 'y':'ed', 'z':'ee'}
  8.  
  9. def cifrar():
  10.    texto = input ("Palabra a cifrar: ").lower()                                
  11.  
  12.    textoleet = ''
  13.    for v in texto:
  14.        if v in diccionario.keys():
  15.            textoleet += diccionario[v]
  16.        else:
  17.            textoleet += v
  18.    print(textoleet)
  19.  
  20. def descifrar():
  21.    texto = input ("Palabra a descifrar: ").lower()                                
  22.    textoleet = ''
  23.    inicio= 0
  24.    final = 2
  25.    while inicio < len(texto) :
  26.        v=texto[inicio:final]
  27.        inicio+=2
  28.        final+=2
  29.        for g,w in diccionario.items():
  30.            if w == v:
  31.                textoleet+= g
  32.    print(textoleet)  
  33.  
  34.  
  35.  
  36. cifrar()
  37. descifrar()

seguramente hay formas mejores pero es la que se me ocurrió primero. otra cosa, revisa tu diccionario porque la n y la ñ tienen el mismo valor, por eso para simplificar saqué la ñ del mio.
« Última modificación: 14 Octubre 2015, 09:39 am por tincopasan » En línea

jam man

Desconectado Desconectado

Mensajes: 32


Ver Perfil
Re: Invertir una función en Python.
« Respuesta #4 en: 14 Octubre 2015, 14:44 pm »

Bueno la cuestión con la "Ñ" es de que tiene la misma coordenada que la "N", lo mismo pasa con la "J" y con la "I", esto de acuerdo a la tabla del cifrado polybios:

https://infow.wordpress.com/2008/11/13/criptografia-clasica-ii-polybios/

y al momento de descifrar ya es cuestión del usuario interpretarlo.

Y muchas gracias!!! Supongo que es lo mismo pero con coordenadas números.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines