Criptografia XOR por deslocamento de texto simples
Aqui está um algoritmo de cifra, baseado em cadeias hexadecimais que é implementado por XORing o texto simples fornecido, N número de vezes onde N é seu comprimento. Mas, o problema é que cada próxima operação XOR é feita após deslocar a entrada de texto simples consecutiva para a direita . Um exemplo de operação é mostrado abaixo:
Suponha que a senha seja 'abcd', então o texto hexadecimal é calculado como a1d0a1d por XORing a senha com ela mesma N vezes, ou seja, 4 vezes neste caso.
Da mesma forma, se a senha for '636f646572' , então
653cae8da8edb426052 é o texto hexadecimal.
Portanto, o enunciado do problema é criar um algoritmo de descriptografia (em qualquer linguagem de programação) e deduzir o texto simples da string hexadecimal fornecida.
Exemplos :
Entrada: a1d0a1d Resultado: abcd abcd uma vez codificado retornará a1d0a1d Entrada: 653cae8da8edb426052 Saída: 636f646572
Abordagem: o ingrediente principal na criptografia e descriptografia está nas propriedades do XOR . XOR é uma operação bit a bit em que o resultado é 0 se as duas entradas possíveis forem iguais, mas 1 quando as entradas forem diferentes . A tabela XOR é fornecida abaixo para referência:
Entradas | Saídas | |
---|---|---|
X | Y | Z |
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
Uma propriedade importante e útil de XOR que é amplamente popular em criptografia é que, no caso de XORing múltiplo de números (digamos, números M ), se conhecermos apenas os números M - 1 (um é desconhecido) junto com o resultado de XOR , então, pode calcular facilmente o número ausente por meio de XORing os números conhecidos e o resultado XOR. Esta propriedade é discutida com os seguintes números hexadecimais:
Estaremos usando a propriedade listada acima ao máximo no curso deste problema. Agora, se olharmos para o diagrama de criptografia de 'abcd' na base, ele é apenas o XORing repetido dos dígitos. O dígito mais à direita é d e o dígito mais à direita de 'abcd' também é d , então o último dígito do texto simples e hexstring é o mesmo . O próximo dígito é 1, que é calculado por XORing o segundo dígito direito de abcd e o dígito anterior, ou seja, 1 = d ^ c usando a propriedade que sabemos que o dígito de texto simples pode ser deduzido como d ^ 1 = c . Da mesma forma, o próximo dígito é um que é encontrado pord ^ c ^ b = a . Precisamos fazer isso apenas até a metade da string hexadecimal, pois o resto é simétrico, portanto, não são necessários .
Abaixo está a implementação da abordagem acima:
hex_s
=
'653cae8da8edb426052'
plain
=
''
x
=
0
l
=
len
(hex_s)
for
i
in
range
(l
-
1
,
int
(l
/
2
)
-
1
,
-
1
):
y
=
x^
int
(hex_s[i],
16
)
x
=
x^y
plain
=
hex
(y)[
-
1
]
+
plain
(plain)
636f646572
As postagens do blog Acervo Lima te ajudaram? Nos ajude a manter o blog no ar!
Faça uma doação para manter o blog funcionando.
70% das doações são no valor de R$ 5,00...
Diógenes Lima da Silva