Skip to content

implementando um algoritmo de criptografia usando o xor

Published: at 02:45

olá pessoal! vamos entender esse código?

function encriptDecript(input: string) {
  const separatedStr = input.split('');
  const xor_term = 'X'; //any character will work here
  for (let i = 0; i < separatedStr.length; i++) {
    separatedStr[i] = String.fromCharCode(separatedStr[i].charCodeAt(0) ^ xor_term.charCodeAt(0));
  }
  return separatedStr.join('');
}

const encriptedInput = encriptDecript('Marcell');
console.log(encriptedInput);
const decriptedOutput = encriptDecript(encriptedInput);
console.log(decriptedOutput);

inicialmente o algoritmo em si encripta um determinado input e o decripta, em seguida com a mesma função.

agora vamos desmembrar essa obra de arte aos poucos.

agora bebemos um copo de água e vamos para a linha de código mais desafiadora do algoritmo

separatedStr[i] = String.fromCharCode(
  //                    |---- 3 ----|
  separatedStr[i].charCodeAt(0) ^ xor_term.charCodeAt(0)
  //              |----1----| |-2-|
);
  1. charCodeAt(0) na string que é chamado, retorna o valor unicode do caractere selecionado. 0 é a posição do indice que ele recebe

67 é o valor unicode da letra C.

const str = "C";

str.charCodeAt(0); // 67
  1. o operador ^ é o bitwise xor é responsável por fazer as operações seguindo a regra da porta lógica exclusive or retornando um bigint com o binário da string.

lembrete

const some_number = 42; // 101010 (base 2)
const other_number = 52; // 110100 (base 2)

console.log(a ^ b); // output: 30 (base 10)

antes de fazermos a prova real deste algoritmo, vamos entender a tabela verdade do xor

aba ⊕ b (a xor b)
000
011
101
110

agora faremos a tabela verdade dos binários de some_number e other_number

some_number (42)other_number (52)some_number ⊕ other_number (30)
110
011
101
011
101
000

convertendo 011110 para a base 10 temos o número 30

  1. fromCharCode() esse método retorna a string equivalente a um valor unicode
String.fromCharCode(67); // C
// volte ao código do tópico 1 caso não tenha entendido o output