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 25Há 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 = 18Etapa 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 = 8Etapa 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.