Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

210
Visualizações
Javascript Vernam Cipher: garantiza la salida entre Unicode 32 y 126

He implementado lo siguiente como máscara para algunos datos:

 function jEncryptDecrypt(data,key) { let jKey = '' let bytKey = []; let bytData = []; for (let i = 1; i < (data.length/key.length) +1; i++) { jKey = jKey + key; } let str = jKey.substring(0, data.length); for (let i = 0; i < str.length; ++i) { var code = str.charCodeAt(i); bytKey = bytKey.concat([code & 0xff, code / 256 >>> 0]); } let str2 = data for (let i = 0; i < str2.length; ++i) { var code = str2.charCodeAt(i); bytData = bytData.concat([code & 0xff, code / 256 >>> 0]); } for (let i = 0; i < bytData.length; ++i) { bytData[i] = bytData[i] ^ bytKey[i]; } str3 = String.fromCharCode(...bytData) str3 = str3.replace(/\0/g, ''); return str3; }

Para algunas salidas, los bytes en el mapa bytData para escapar de los caracteres; dependiendo de dónde ejecute el código, obtengo el carácter (JSFiddle) o obtengo \uXXXX (aplicación de terceros). La salida podría terminar siendo tratada en diferentes plataformas/idiomas, por lo que idealmente me gustaría evitar los caracteres especiales y solo tener caracteres en el rango Unicode de 32 a 126.

es posible? La aplicación en la que estoy implementando esto es bastante restrictiva, por lo que no puedo usar ninguna biblioteca, solo JS puro.

Editar

Cambié el código al siguiente, que genera una serie de números en el cifrado y los acepta como entrada en el descifrado

 function jEncryptDecrypt(data,key) { let jKey = '' let bytKey = []; let bytData = []; //expand key to cover length of input for (let i = 1; i < (data.length/key.length) +1; i++) { jKey = jKey + key; } //shorten key to same lenght as input let str = jKey.substring(0, data.length); //loop over key to create array of numbers from unicode value for (let i = 0; i < str.length; ++i) { var code = str.charCodeAt(i); bytKey = bytKey.concat([code & 0xff, code / 256 >>> 0]); } //if data input is array no need to do anything if (Array.isArray(data)) { bytData = data; //otherwise loop over data to create array of numbers from unicode value } else { let str2 = data for (let i = 0; i < str2.length; ++i) { var code = str2.charCodeAt(i); bytData = bytData.concat([code & 0xff, code / 256 >>> 0]); } } //XOR each data value with each key value in turn for (let i = 0; i < bytData.length; ++i) { bytData[i] = (bytData[i] ^ bytKey[i]); } //if input was array return string, otherwise return array if (Array.isArray(data)) { str3 = String.fromCharCode(...bytData) str3 = str3.replace(/\0/g, ''); return str3; } else { return bytData; } }

Es torpe y hacky, pero funciona para mis necesidades. ¡Si hay una respuesta a la pregunta original, sería muy apreciada!

about 4 years ago · Juan Pablo Isaza
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda