Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

401
Views
Convierta Node crypto aes-256-cbc a CryptoJS

¿Cómo convertir el cifrado del módulo criptográfico incorporado del siguiente nodo a CryptoJS ?

 const crypto = require('crypto'); const pass = 'some,password:)with>spec(chars*' const cipher1 = crypto.createCipher('aes-256-cbc', pass) const c1 = cipher1.update(input, 'utf8', 'hex') + cipher1.final('hex')

Intenté algo como esto, pero los resultados no son los mismos:

 const CryptoJS = require('crypto-js'); const pass = 'some,password:)with>spec(chars*' const cipher2 = CryptoJS.AES.encrypt(input, pass, { mode: CryptoJS.mode.CBC, }); const c2 = cipher2.ciphertext.toString(CryptoJS.enc.Hex);

Necesito esto para usarlo como un script de solicitud previa de Postman, ya que no admite crypto de Node, sino crypto-js .

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Ambos códigos usan la función de derivación de clave patentada de OpenSSL EVP_BytesToKey() con un recuento de iteraciones de 1 y MD5 como resumen.
NodeJS no usa una sal, mientras que CryptoJS aplica una sal aleatoria . Por esta razón, el resultado de NodeJS no cambia para cada encriptación, mientras que el resultado de CryptoJS siempre cambia (asumiendo el mismo texto sin formato y frase de contraseña).

Por lo tanto, para obtener el resultado del código NodeJS con el código CryptoJS, no debe usar una sal. Sin embargo, por defecto, siempre se aplica una sal. Esto solo se puede eludir determinando explícitamente la clave y el IV con la función de derivación de clave EvpKDF y luego usando ambos en el cifrado:

 var input = "The quick brown fox jumps over the lazy dog"; var pass = 'some,password:)with>spec(chars*' var keySize = 32/4; var ivSize = 16/4; var kdf = CryptoJS.algo.EvpKDF.create({ keySize: keySize + ivSize, hasher: CryptoJS.algo.MD5 }).compute(pass, ''); // no salt! var key = CryptoJS.lib.WordArray.create(kdf.words.slice(0, keySize), keySize * 4); var iv = CryptoJS.lib.WordArray.create(kdf.words.slice(keySize), ivSize * 4); var ciphertextCP = CryptoJS.AES.encrypt(input, key, {iv: iv}); // default: CBC, PKCS#7 padding var ciphertext = ciphertextCP.ciphertext.toString(CryptoJS.enc.Hex); document.getElementById("ct").innerHTML = ciphertext; // d98cf2d285bf0c1d796226190bf54d9c5540300ee1c6f35618f8bb3564b5053920ec958d31b41bbe4e4880e23543d709
 <script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.0.0/crypto-js.min.js"></script> <p style="font-family:'Courier New', monospace;" id="ct"></p>

Este código CryptoJS produce el mismo texto cifrado para el mismo texto sin formato y frase de contraseña que el código NodeJS.


Tenga en cuenta que la derivación de clave con EVP_BytesToKey() y los parámetros elegidos están obsoletos y se consideran inseguros hoy. Esto es cierto para NodeJS en mayor medida que para CryptoJS, debido a la falta de sal.

Es más seguro evitar la función de derivación de clave incorporada y especificar la clave directamente.
Para hacer esto, use createCipheriv() en NodeJS y pase la clave como WordArray en el código CryptoJS. De esta forma, se debe generar explícitamente un IV aleatorio para cada encriptación.
Opcionalmente, se puede usar una función de derivación de clave confiable como PBKDF2, que es compatible con ambas bibliotecas.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!