Cifrado de Hill

En Cifrado de Hill, la codificación se realiza usando la cadena de entrada de una clave y un mensaje, que se convierten en matrices y luego nuevamente en el mensaje codificado.

Crea una función que reciba dos argumentos, key y message, y devuelva el mensaje codificado.

Asigna un número único a cada letra del alfabeto.

 a  b  c  d  e  f  g  h  i  j  k  l  m
 0  1  2  3  4  5  6  7  8  9  10 11 12
 n  o  p  q  r  s  t  u  v  w  x  y  z
 13 14 15 16 17 18 19 20 21 22 23 24 25

Existen algunas variaciones en las reglas de cifrado. A continuación se describe una versión de las reglas del cifrado:

message = "H& *i"
key = "cats"

hillCipher(message, key) ➞ "OR"

Paso 1: Crea una matriz de 2 x 2 con la key proporcionada (La longitud de la clave siempre será = 4). Convierte la clave por filas en una matriz de 2x2 y sustituye las letras por sus respectivas posiciones en el alfabeto, es decir, A=0, B=1, C=2 y así sucesivamente:

key = "cats"

[[ 2  0]
 [19 18]]

// c = 2, a = 0, t = 19, s = 18

Paso 2: Elimina los espacios y todos los caracteres que no sean letras del mensaje proporcionado:

"Hi"

Paso 3: Divide el message en pares de dos y convierte esos pares en matrices de 2x1. Si la longitud de message es un número impar, simplemente agrega una Z al final.

[[7]
 [8]]

// H = 7, i = 8

Paso 4: Multiplica ambas matrices y calcula el módulo de 26 con la matriz resultante:

[[ 2  0]  *  [[7]  =  [[14]   =  [[14]  mod 26
 [19 18]]     [8]]     [277]]     [17]]

Paso 5: Encuentra las letras correspondientes a las posiciones de la matriz resultante:

eMessage = "OR"

// 14 = O, 17 = "R"

Consulta los siguientes ejemplos para comprenderlo mejor:

Ejemplos

hillCipher("H& *i", "cats") ➞ "OR"

hillCipher("mubashir","matt") ➞ "OKMTIHSH"

hillCipher("Five + Seven = Twelve", "math") ➞ "IVSLIGSLAQEECSWR"

Notas

  • El texto puede contener letras mayúsculas y minúsculas. Estandarízalas y devuelve el mensaje cifrado en letras mayúsculas.
  • La longitud de la clave siempre será = 4.