Foro de elhacker.net

Programación => Desarrollo Web => Mensaje iniciado por: AlbertoBSD en 3 Agosto 2022, 17:29 pm



Título: [Resuelto] alternativa a hash_pbkdf2 de PHP en javascript?
Publicado por: AlbertoBSD en 3 Agosto 2022, 17:29 pm
Hola tengo una pequeña duda de que alternativa utilizar a la función hash_pbkdf2 de PHP en javascript.

Ejemplo en PHP

Código
  1. <?php
  2. $salt = hex2bin("0123456789ABCDEF0123456789ABCDEF");
  3. $secret = hash_pbkdf2("sha512","secret",$salt,200000,0,false);
  4. echo "$secret\n";
  5. ?>
  6.  

Salida:
Código:
b14e5cb8d8ab9cabd2374a6d7a3dc6c1e8c2426fea3aaee98739d39c7e98661848fa22dc08e8734790fc4f88a007bd1a6e38ee4f70c7d3823bae8b848a9cedfa

Ya intente utilizar WebCrypto API y tambien CryptoJS y ninguno produce el mismo resultado, tal vez estoy haciendo las cosas mal no lo se, pero no mas no doy con la solucion

Código
  1. function test() {
  2. salt = hexToBytes("0123456789ABCDEF0123456789ABCDEF");
  3. password = "secret"
  4. secret = CryptoJS.PBKDF2(CryptoJS.enc.Utf8.parse(password), CryptoJS.enc.Utf8.parse(salt), { keySize: 512 / 32, iterations: 200000, hasher: CryptoJS.algo.SHA512});
  5. console.log(secret);
  6. }

Salida
Código:
4e334679d8a7368e0ed0d0699f164317931f4bf227c45989ed59b3ad2424bbe8b056298c0d56e08c810ce4e1ad7e34ab067ab1e9ee47a9ee69ab7ab3351ea126

Adicional a esto tengo el problema del Rendimiento en PHP originalmente tenia Un millon de Iteraciones y en PHP solo tardaba un segundo, pero estas funciones de JS tardaban mas de 2 minutos.

Saludos!


Título: Re: alternativa a hash_pbkdf2 de PHP en javascript?
Publicado por: MinusFour en 3 Agosto 2022, 19:28 pm
Es porque estás utilizando UTF8 para parsear el salt. Tienes que usar el encoder hexadecimal y sin tener que utilizar la función esa de hexToBytes.

Código
  1. CryptoJS.enc.Hex.parse

A mi me ha funcionado bien desde node:

Código
  1. crypto.pbkdf2Sync('secret', Buffer.from('0123456789ABCDEF0123456789ABCDEF', 'hex'), 200000, 512, 'sha512').toString('hex');

Código:
'b14e5cb8d8ab9cabd2374a6d7a3dc6c1e8c2426fea3aaee98739d39c7e98661848fa22dc08e8734790fc4f88a007bd1a6e38ee4f70c7d3823bae8b848a9cedfa'


Título: Re: alternativa a hash_pbkdf2 de PHP en javascript?
Publicado por: AlbertoBSD en 4 Agosto 2022, 00:09 am
uff, muchas gracias MinusFour  ;-), en node tienes Tambien el problema del rendimiento que menciono?

Por que en el navegador tarda bastante, lo acabo de medir y tarda 15 segundos cuando la funcion en PHP tarda menos de un segundo con las 200 mil iteraciones.

Cuando lo tenia con Un millon de iteraciones en PHP tarda cerca de un segundo en mi laptop y en el navegador tarda cerca de 2 minutos.

Saludos!


Título: Re: alternativa a hash_pbkdf2 de PHP en javascript?
Publicado por: MinusFour en 4 Agosto 2022, 02:36 am
uff, muchas gracias MinusFour  ;-), en node tienes Tambien el problema del rendimiento que menciono?

Por que en el navegador tarda bastante, lo acabo de medir y tarda 15 segundos cuando la funcion en PHP tarda menos de un segundo con las 200 mil iteraciones.

Cuando lo tenia con Un millon de iteraciones en PHP tarda cerca de un segundo en mi laptop y en el navegador tarda cerca de 2 minutos.

Saludos!

Yo no tengo tanto problema con NodeJS, pero el resultado en definitiva no es inmediato.


Título: Re: alternativa a hash_pbkdf2 de PHP en javascript?
Publicado por: AlbertoBSD en 4 Agosto 2022, 05:32 am
Va, se que no es inmediato, pero vamos que en el navegador tarde de cerca de 50 veces mas tiempo, se me hace excesivo, ahora Tambien tendre que probar cuanto tarda un smartphone de gama media. para limitarlo a unos 3 segundos, me imagino que tendré que degradar la seguridad limitando el numero de iteraciones a 50mil o algun numero mas bajo.

Saludos y de nuevo muchas gracias.