Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

141
Vistas
Generar número de expediente codificado a partir de dos enteros y decodificarlo

Estoy tratando de generar un número de expediente codificado a partir de storeId y transactionId. El número de expediente codificado tiene que ser único, la longitud debe ser <=9 y también fácil de leer/copiar para los usuarios.

La longitud máxima de storeId es 3 y la longitud máxima de transactionId es 5.

¿Cómo puedo mejorar mi código para que mi número de expediente sea irrompible?

Aquí está mi código:

 let myTransKey = 19651;
let myStoreKey = 186;

function generateShortCode(storeId, transactionId) {
 //reverse the ids and then add the respective key
 var SID = storeId.toString().split("").reverse().join("");
 SID = parseInt(SID) + myStoreKey;
 var TID = transactionId.toString().split("").reverse().join("");
 TID = parseInt(TID) + myTransKey;
 var docketNum = `${SID}-${TID}`;
 return docketNum;
}


function decodeShortCode(shortCode) {
 shortCode = shortCode.split("-");
 var storeID = shortCode[0];
 var transactionID = shortCode[1];

 //subtract the same key and then reverse the ids again
 storeID = parseInt(storeID.toString()) - myStoreKey;
 storeID = storeID.toString().split("").reverse().join("");

 transactionID = parseInt(transactionID.toString()) - myTransKey;
 transactionID = transactionID.toString().split("").reverse().join("");

 return {
 storeId: parseInt(storeID), // store id goes here,
 shopDate: new Date(), // the date the customer shopped,
 transactionId: parseInt(transactionID) // transaction id goes here
 };
}

¿Hay alguna manera mejor de hacer esto? Necesito codificar el número de expediente de una manera que sea realmente difícil de decodificar por una tercera persona.

almost 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Todos los mensajes cifrados pueden romperse si un atacante intenta todas las claves de descifrado posibles (esto se denomina ataque de fuerza bruta). Con las computadoras modernas, esto es muy fácil de hacer. La forma en que está codificando los datos es muy fácil de romper (en cuestión de segundos). Sin embargo, hay métodos de cifrado que tardan mucho en descifrarse (como millones de años).

Uno de los algoritmos de cifrado más populares es AES . Debido a que es tan popular, también hay muchas bibliotecas fáciles de usar para JavaScript. Aquí hay un ejemplo con CryptoJS :

 const KEY = "a super secret password";

let myTransKey = 19651;
let myStoreKey = 186;

function generateShortCode(storeId, transactionId) {
 const docketNum = `${storeId}-${transactionId}`;
 return CryptoJS.AES.encrypt(docketNum, KEY).toString().replace("=", "");
}


function decodeShortCode(shortCode) {
 const docketNum = CryptoJS.AES.decrypt(shortCode, KEY).toString(CryptoJS.enc.Utf8);
 const parts = docketNum.split("-");
 return {
 storeId: parseInt(parts[0]), // store id goes here,
 shopDate: new Date(), // the date the customer shopped,
 transactionId: parseInt(parts[1]) // transaction id goes here
 };
}

const s1 = generateShortCode(myStoreKey, myTransKey);
console.log("Short Code: " + s1);
console.log("Decrypted Short Code:", decodeShortCode(s1));
 <script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/aes.js" integrity="sha256-/H4YS+7aYb9kJ5OKhFYPUjSJdrtV6AeyJOtTkw6X72o=" crossorigin="anonymous"></script>

Este código abreviado tiene más de 9 caracteres, pero es muy seguro y casi irrompible. Esto es realmente solo la compensación. Si reduce la longitud del código abreviado, no podrá tener un código abreviado seguro. Sin embargo, los usuarios aún pueden copiar y pegar fácilmente el código. Si necesita absolutamente un cifrado más corto, intente mirar Skip32 .

Asegúrese de cambiar KEY por una clave secreta que no se comparta con nadie. Además, asegúrese de no ejecutar este código del lado del cliente. Si la clave de cifrado se envía al cliente, este podría mirar el código JavaScript y luego descifrar cualquier mensaje.

almost 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda