Escreva um programa ou função (ou conjunto de programas / funções) para criptografar e descriptografar dados, de acordo com a seguinte especificação:
Criptografia
Calcule um hash XOR da entrada XOR-ing cada byte um com o outro.
XOR cada byte da entrada por esse hash.
Mude o resultado quatro bits para a esquerda.
Preencher o lado esquerdo com os quatro primeiros bits do hash XOR.
Preencher o lado direito com os últimos quatro bits do hash XOR.
Exemplo
Dados fornecidos:
"G0lf"
(0x47306C66
)Calcular o hash XOR:
0x47 ^ 0x30 ^ 0x6C ^ 0x66 = 0x7D
XOR cada byte por hash:
0x3A4D111B
Resultado esperado (após turno e bloco):
"s¤Ñ\x11½"
(0x73A4D111BD
)
Regras
Seu programa / função pode entrar / sair de qualquer tipo que faça sentido no idioma de sua escolha (String, Byte Array, etc) , desde que a entrada / saída sejam os bytes reais. Por exemplo, você não pode emitir uma seqüência hexidecimal.
Criptografia e descriptografia podem ser separadas em programas separados (a pontuação será o tamanho combinado) ou em um único. Métodos únicos podem usar um argumento para criptografar ou descriptografar.
Pode-se esperar que a entrada para criptografia tenha pelo menos 1 byte de tamanho.
Pode-se esperar que a entrada para descriptografia seja de pelo menos 2 bytes.
Bytes não imprimíveis não precisam ser escapados na saída.
fonte
Respostas:
CJam, 28 + 27 = 55 bytes
Para cada parte, estou apresentando um programa que espera que a entrada / saída esteja na forma de um array inteiro e um que use uma string. A contagem de bytes acima é para a versão do array inteiro, mas o script vinculado e a explicação são para a versão baseada em string (que pode ser usada para testar o exemplo dado na pergunta).
Criptografia
Descriptografia
Aqui está um script de teste que faz uma ida e volta completa e imprime o código criptografado antes de fazer a descriptografia novamente.
Explicação
fonte
CJam, 36 + 34 = 70 bytes
Uma abordagem um pouco diferente usando formulários binários
Criptografador :
Como funciona:
Decrypter :
Como funciona:
Experimente o criptografador e decodificador online
fonte
Pitão, 69 bytes
Isso combina criptografia e descriptografia, basta adicionar um
0
argumento as para criptografia ou um1
para descriptografia. A razão para isso é simples. A conversão de strings em bits (ou número inteiro de 4 bits) ou o inverso é realmente muito longo em Pyth. Ao combinar as duas funções em um programa, eu posso economizar muitos bytes.Demonstrações online: Criptografia e Descriptografia .
Explicação:
A primeira parte converte a entrada em uma lista de números inteiros de 4 bits (cada caractere é convertido em 2 números inteiros de 4 bits) e a armazena
K
.A segunda parte determina os valores de hash e os armazena
J
. SeQ==0
calculá-los por xor, caso contrário, leva o primeiro e o último valor deK
.A próxima parte executa o xor usando os valores de hash. Quando
Q == 0
é executado na lista completaK
, caso contrário, apenas na listaK
sem o primeiro e o último valor.E a última parte é convertida
K
novamente em caracteres:fonte
Javascript ( ES6 ) 83 + 73 = 156
Ambas as funções recebem e inserem uma matriz de números para representar bytes.
Criptografar
858483Descriptografar
7573Demonstração (apenas Firefox)
Usando as cordas 131 + 129 = 260
E apenas por diversão ... aqui estão algumas versões que usam seqüências de caracteres para entrada / saída.
fonte