O algoritmo rot-13 é un algoritmo para codificar e decodificar texto. O algoritmo rot-13 fundaméntase en que no código ASCII os 26 caracteres entre o "A" e o "Z", así como entre o "a" e o "z", son consecutivos. Por tanto, se se moven 13 posición a estes caracteres (a metade dos 26 caracteres do inglés), conséguese outro caracteres que se pode recuperar movendo outros 13 espazos. Este algoritmo é moi sinxelo e por tanto non serve máis que para exemplo, pero en ningún caso para un uso serio.

O código desta anotación é un módulo chamado rot13 que implementa unha función chamada encrypt que codifica/decodifica unha cadea de caracteres. Internamente encrypt chama a un módulo privado chamado _rot13 que é o que fai a codificación dun caracterer. O código tamén se pode executar coma un script por si mesmo e neste caso codificará/decodificará o que se lle pase ó script coma parámetros.

Para aplicar este algoritmo hai que ter claro que non se pode codificar tódolos caracteres posibles con rot-13, só 26 (ou 52 se diferenciamos entre maiúsculas e minúsculas). Así, o primeiro que se fai na función _rot13 é verificar se o caracter se pode codificar/decodificar e devolve-lo intacto se non se pode.

Código

#! /usr/bin/env python
# -*- coding: iso-8859-15 -*-
"""Módulo que codifica e decodifica un texto co algoritmo rot13.
Este algoritmo non é seguro e só se debe empregar coma exemplo."""

__all__ = ["encrypt"]

__ord_A = ord("A")
__num_chars = ord("Z") - ord("A") + 1

def _rot13(character):
    """Devolve un caracter codificado co algoriitmo rot-13."""
    index = ord(character.upper()) - __ord_A
    if not character.isalpha() or index > 127:
        return character

    new_character = chr((index + 13) % __num_chars + __ord_A)
    if character.islower():
        new_character = new_character.lower()

    return new_character

def encrypt(text):
    """Devolve un texto codificado co algoritmo rot-13."""
    encrypted_text = []
    for character in text:
        encrypted_text.append(_rot13(character))
    return "".join(encrypted_text)

if __name__ == "__main__":
    # Execución do algoritmo ós parámetros do script
    import sys
    print encrypt(" ".join(sys.argv[1:]))
Chuzame! chuzame -

0 Responses to “Codificación/decodificación de texto co algoritmo rot-13”

  1. No Comments

Leave a Reply





Categories

Calendario

abril 2007
L_Luns_inicial M_martes_inicial M_mércores_inicial X_xoves_inicial V_venres_inicial S_sábado_inicial D_domingo_inicial
« mar    
 1
2345678
9101112131415
16171819202122
23242526272829
30  
3K2 theme by Hakan Aydin