Quiero crear un hash de I love cupcakes
(firmado con la clave abcdeg
)
¿Cómo puedo crear ese hash, usando Node.js Crypto?
javascript
node.js
algorithm
hash
node-crypto
usuario847495
fuente
fuente
crypto.timingSafeEqual(Buffer.from(a), Buffer.from(b))
: stackoverflow.com/questions/31095905/…Hace unos años se decía que
update()
ydigest()
eran métodos heredados y se introdujo el nuevo enfoque de la API de streaming. Ahora los documentos dicen que se puede usar cualquier método. Por ejemplo:Probado en el nodo v6.2.2 y v7.7.2
Ver https://nodejs.org/api/crypto.html#crypto_class_hmac . Da más ejemplos para usar el enfoque de transmisión.
fuente
update
y nowrite
. Estoy confundido, ¿cuál es la mejor práctica ahora? No puedo encontrar recursos que lo digan tan claramente como lo mencionas.digest
y noupdate
han quedado en desuso y aparecen en la documentación: nodejs.org/api/crypto.html#crypto_class_hmac . Recomiendo usar la API de transmisión solo si está leyendo desde una transmisión.La solución de Gwerder no funcionará porque
hash = hmac.read();
sucede antes de que finalice la transmisión. De ahí los problemas de AngraX. Además, lahmac.write
declaración no es necesaria en este ejemplo.En cambio, haz esto:
Más formalmente, si lo desea, la línea
podría ser escrito
porque en este ejemplo el texto es una cadena utf
fuente
It is a stream that is both readable and writable. The written data is used to compute the hmac. Once the writable side of the stream is ended, use the read() method to get the computed digest.
Lo lees cuando finalizó el lado de escritura , ni siquiera necesitas esperar cuando el lado legible se vuelve legible (aunque seguramente lo hace). Lea su documentación por favor.hmac.end(...)
se haya llamado, " finalizado " significa que la secuencia ha generado su evento de finalización , por lo que el comando acepta una devolución de llamada. Después de llamar al método end (), la secuencia requiere tiempo para vaciar los datos al sistema subyacente. Si llama a read () antes de que se genere el evento de finalización, fallará. Siga adelante y pegue el código de Gwerder en JSbin y compruébelo usted mismo. Debería leer la documentación de Streams para comprender cómo funciona.read()
cuando finalizó el lado de escritura , y no hay nada sobre el evento de finalización.