Estamos migrando de sistemas de foros, por favor repórtanos cualquier problema a [email protected], si te llega a tu bandeja de entrada o a spam un correo que te dice que se solicitó el cambio de contraseña, no te alarmes, es un procedimiento normal de la migración, cambia tu contraseña porque no hay compatibilidad en el sistema de cifrado del viejo sistema con el sistema nuevo, por eso debes resetear tu clave con ese enlace.

problema con símbolos en python

editado 23 de marzo en Programación

Hola, les presento un problema que e tenido con un pequeño programa de criptografía que estoy creando, verán, el programa en teoría utiliza el cifrado cesar basándose en el código ascii, en vez de el abecedario. Este programa funcionaba bastante bien hasta que no se porque a la hora de cifrar un archivo con el método que e nombrado antes, no lo cifra basándose en el código ascii, y al introducir el contenido del archivo ya encriptado, introduce este tipo de códigos: +,

elif pregunta == "3":
    archi = raw_input("Introduzca el nombre del archivo a encriptar: ")
    nombre = raw_input("Introduzca el nombre del fichero con el codigo encriptado: ")   
    os.system("touch "+nombre+".txt")
    abrir = open(archi , "r+")
    n = abrir.read()
    por = raw_input("""1) Metodo Cesar 
2) A la inversa
>""")
    if por == "1":
        codigo = raw_input("Introduce la clave: ")
        for letra in n:
            a  = chr(ord(letra) + int(codigo))
            if ord(a) > 95:     
                a = chr(ord(letra) + int(codigo) - 95)      
                fuera2 += str(a)
            fuera2 += str(a)
        print fuera2

Espero que me puedan ayudar y gracias por adelantado.


Etiquetado como:

Comentarios

  • Me gustaría hacer unas cuantas observaciones a su código, quizá corrigiendo eso pueda tener mejores resultados:

    • Me llama mucho la atención que haga un touchal archivo de salida, es para reservar el nombre? no deja de ser algo un poco "sucio", si evita la llamada del sistema quizá el código le sea más portable.
    • Usted está limitando el diccionario a los primeros 95 caracteres de la tabla ASCII, lo que le puede ocasionar inconsistencias al existir la posibilidad de que hayan entradas por fuera de ese rango, tal y como lo maneja usted, no está validando este problema.
    • Parece que está olvidando que es posible que la codificación del texto tenga caracteres especiales como aquellos con tildes y diéresis, eso le puede ocasionar inconsistencias del tipo mencionado en el punto 2.
    • En cuanto a la sustitución de caracteres en un rango definido le recuerdo que existe el operador módulo, que en python se expresaría así: a = chr ((ord (letra) + int (codigo)) % 95), de esta manera se ahorraría líneas de código.
    • Por último, señalar que la salida de la función chr no necesita ser pasada por str para concatenar.
Accede o Regístrate para comentar.