Cifra de Hill

Na Cifra de Hill, a codificação é feita usando a string de entrada de uma chave e uma mensagem, que são transformadas em matrizes e depois novamente na mensagem codificada.

Crie uma função que receba dois argumentos, key e message, e retorne a mensagem codificada.

Atribua um número exclusivo a cada letra do 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

Há algumas variações nas regras de cifragem. Uma versão das regras da cifra está descrita abaixo:

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

hillCipher(message, key) ➞ "OR"

Etapa 1: Crie uma matriz 2 x 2 com a key fornecida (O comprimento da chave será sempre = 4). Converta a chave linha a linha em uma matriz 2x2 e substitua as letras pelas respectivas posições no alfabeto, ou seja, A=0, B=1, C=2 e assim por diante:

key = "cats"

[[ 2  0]
 [19 18]]

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

Etapa 2: Remova os espaços e todos os caracteres que não sejam letras da mensagem fornecida:

"Hi"

Etapa 3: Divida o message em pares de dois e converta esses pares em matrizes 2x1. Se o comprimento de message for um número ímpar, basta adicionar um Z ao final.

[[7]
 [8]]

// H = 7, i = 8

Etapa 4: Multiplique as duas matrizes e descubra o módulo de 26 com a matriz resultante:

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

Etapa 5: Encontre as letras nas posições da matriz resultante:

eMessage = "OR"

// 14 = O, 17 = "R"

Veja os exemplos abaixo para entender melhor:

Exemplos

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

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

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

Observações

  • O texto pode conter letras maiúsculas e minúsculas. Padronize-as e retorne a mensagem criptografada em letras maiúsculas.
  • O comprimento da chave será sempre = 4.