Realmente me está dando dolor de cabeza esto, así que espero que alguien pueda ayudarme.
Quiero crear un hashToken para guardar y proteger algunos datos. No son datos confidenciales, por lo que el nivel de seguridad no necesita ser tan alto.
El escenario es así. Recibo datos en el backend, que ya es algo así como un token: 9ECB531EC6AE02CB0274336690E76A0A39511429859537BE242147B65B1824DD
.
La siguiente entrada es un token diferente, pero la tercera entrada puede ser el mismo token que el anterior. Entonces, cuando recibo un hashtoken que ya recibí anteriormente, debe ser el mismo texto encriptado que el que ya no existe.
Traté de guardarlo a través del módulo criptográfico de nodejs, así:
const iv = randomBytes(16); const password = 'VerySecurePasswordHere'; const key = (await promisify(scrypt)(password, 'salt', 32)) as Buffer; const cipher = createCipheriv( 'aes-256-ctr', key, iv ); const tokenToEncrypt = '9ECB531EC6AE02CB0274336690E76A0A39511429859537BE242147B65B1824DD'; const encryptedText = Buffer.concat([ cipher.update(tokenToEncrypt), cipher.final(), ]); output of encrypted text = 0e2e913119d2699be2f3c6e5c7da8f03258207f19f3aea85014c9ce648730bea9faddb0c7dad1f49f73c5ff86051c6758d3573d4c28c972b859f8e4290c835c4
Básicamente, esto funciona, pero dos cosas no funcionan para mi escenario:
El texto cifrado es demasiado largo. Quiero que la salida tenga la misma longitud/estilo que la entrada tokenToEncrypt
.
Estoy usando instancias en la nube para ejecutar el código, por lo que cada vez que el contenedor quede inactivo y se reinicie, la salida del mismo tokenToEncrypt
será totalmente diferente. Este debe ser el mismo texto cifrado que el que ya está guardado en la base de datos.
¿Tiene algún consejo para que esto me empuje en la dirección correcta? También probé bCrypt, pero también obtuve un hashToken muy largo, y no con el mismo estilo que el token de entrada.