Tracks
/
Go
Go
/
Ejercicios
/
Cifrado simple
Cifrado simple

Cifrado simple

Fácil

Instrucciones

Crea una implementación del cifrado de Vigenère. El cifrado de Vigenère es un cifrado por sustitución sencillo.

Terminología del cifrado

Un cifrado es un algoritmo que se usa para cifrar, o codificar, un string. El string sin cifrar se llama texto plano y el string cifrado se llama texto cifrado. Convertir texto plano en texto cifrado se llama codificación, mientras que lo contrario se llama descodificación.

En un cifrado por sustitución, cada letra del texto plano se reemplaza por una letra del texto cifrado que se calcula con la ayuda de una clave. (Nota: es posible que la letra de reemplazo sea la misma que la letra original).

Detalles de la codificación

En este cifrado, la clave es una serie de letras minúsculas, como "abcd". Cada letra del texto plano se desplaza o se rota una distancia que depende de la letra correspondiente en la clave. Una "a" en la clave significa un desplazamiento de 0 (es decir, ningún desplazamiento). Una "b" en la clave significa un desplazamiento de 1. Una "c" en la clave significa un desplazamiento de 2, y así sucesivamente.

La primera letra del texto plano usa la primera letra de la clave, la segunda letra del texto plano usa la segunda letra de la clave, y así sucesivamente. Si se te acaban las letras de la clave antes de que se te acaben las letras del texto plano, vuelve a empezar desde el principio de la clave.

Si la clave solo contiene una letra, como "dddddd", entonces todas las letras del texto plano se desplazan la misma cantidad (tres en este ejemplo), lo que haría que esto fuera lo mismo que un cifrado rotacional o cifrado de desplazamiento (a veces llamado cifrado César). Por ejemplo, el texto plano "iamapandabear" se convertiría en "ldpdsdqgdehdu".

Si la clave solo contiene la letra "a" (una o más veces), la distancia de desplazamiento es cero y el texto cifrado es igual al texto plano.

Sin embargo, por lo general la clave es más complicada que eso. Si la clave es "abcd", las letras del texto plano se desplazarían distancias de 0, 1, 2 y 3. Si el texto plano es "hello", necesitamos 5 desplazamientos, así que la clave daría la vuelta, produciendo distancias de desplazamiento de 0, 1, 2, 3 y 0. Si aplicamos esos desplazamientos a las letras de "hello", obtenemos "hfnoo".

Claves aleatorias

Si no se proporciona ninguna clave, genera una clave que consista en al menos 100 letras minúsculas aleatorias del alfabeto latino.

Notas de implementación

La definición de la interfaz Cipher se encuentra en cipher.go.

Tus implementaciones deben ajustarse a la interfaz Cipher.

type Cipher interface {
    Encode(string) string
    Decode(string) string
}

Se espera que Encode ignore todos los valores en el string que no sean A-Za-z; no se representarán en la salida. La salida también se normalizará a minúsculas.

Las funciones que se usan para obtener los cifrados son:

func NewCaesar() Cipher { }

func NewShift(distance int) Cipher { }

func NewVigenere(key string) Cipher { }

El argumento para NewShift debe estar en el rango de 1 a 25 o de -1 a -25. No se permite el cero. Para argumentos inválidos, NewShift devuelve nil.

El argumento para NewVigenere debe consistir únicamente en letras minúsculas de la a a la z. No se permiten los valores que consistan enteramente en la letra 'a'. Para argumentos inválidos, NewVigenere devuelve nil.

Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
Go Exercism

¿Todo listo para empezar Cifrado simple?

Regístrate en Exercism para aprender y dominar Go con 35 conceptos167 ejercicios y mentoría humana real, todo gratis.