Chcę utworzyć skrót I love cupcakes
(podpisany kluczemabcdeg
)
Jak mogę utworzyć ten skrót za pomocą Crypto Node.js?
javascript
node.js
algorithm
hash
node-crypto
użytkownik847495
źródło
źródło
crypto.timingSafeEqual(Buffer.from(a), Buffer.from(b))
: stackoverflow.com/questions/31095905/…Kilka lat temu mówiło się, że
update()
idigest()
były starsze metody i nowe podejście Streaming API został wprowadzony. Teraz doktorzy mówią, że można zastosować dowolną metodę. Na przykład:Testowane na węzłach 6.2.2 i 7.0.7
Zobacz https://nodejs.org/api/crypto.html#crypto_class_hmac . Podaje więcej przykładów użycia metody przesyłania strumieniowego.
źródło
update
a nie użyciewrite
. Jestem zdezorientowany, co jest teraz najlepszą praktyką? Nie mogę znaleźć zasobów, które mówią to tak jasno, jak o tym wspominasz.digest
aupdate
które nie były przestarzałe i są przedstawione w dokumentacji: nodejs.org/api/crypto.html#crypto_class_hmac . Zalecam używanie interfejsu API strumienia tylko wtedy, gdy czytasz ze strumienia.Rozwiązanie Gwerdera nie zadziała, ponieważ
hash = hmac.read();
dzieje się to przed sfinalizowaniem strumienia. Zatem problemy AngraX. Równieżhmac.write
instrukcja nie jest konieczna w tym przykładzie.Zamiast tego zrób to:
Bardziej formalnie, jeśli chcesz, linia
można napisać
ponieważ w tym przykładzie tekst jest ciągiem utf
źródło
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.
Czytasz go podczas zapisu strona skończyło , nie trzeba nawet czekać do kiedy czytelna strona staje się czytelny (choć na pewno nie). Proszę przeczytać dokumentację.hmac.end(...)
że został wywołany, „ zakończony ” oznacza, że strumień podniósł swoje zakończenie zdarzenia , dlatego polecenie akceptuje wywołanie zwrotne. Po wywołaniu metody end () strumień wymaga czasu, aby opróżnić dane do systemu bazowego. Jeśli wywołasz read () przed zgłoszeniem zdarzenia zakończenia, zakończy się ono niepowodzeniem. Śmiało, wklej kod Gwerdera do JSbin i przekonaj się sam. Powinieneś przeczytać dokumentację dotyczącą strumieni, aby zrozumieć, jak to działa.read()
gdy kończy się zapisywalna strona, i nie ma nic o zdarzeniu kończącym.