Saya mencoba membuat server websocket yang ditulis di node.js
Agar server bekerja, saya perlu mendapatkan hash SHA1 dari sebuah string.
Apa yang harus saya lakukan dijelaskan di Bagian 5.2.2 halaman 35 dokumen .
CATATAN: Sebagai contoh, jika nilai
"Sec-WebSocket-Key"
tajuk di jabat tangan klien adalah"dGhlIHNhbXBsZSBub25jZQ=="
, server akan menambahkan tes"258EAFA5-E914-47DA-95CA-C5AB0DC85B11"
untuk membentuk string"dGhlIHNhbXBsZSBub25jZQ==258EAFA5-E914-47DA-95CA-C5AB0DC85B11"
. Server kemudian akan mengambil hash SHA-1 dari string ini, memberikan nilai 0xb3 0x7a 0x4f 0x2c 0xc0 0x62 0x4f 0x16 0x90 0xf6 0x46 0x06 0xcf 0x38 0x59 0x45 0xb2 0xbe 0xc4 0xea. Nilai ini kemudian dikodekan base64, untuk memberikan nilai"s3pPLMBiTxaQ9kYGzzhZRbK+xOo="
, yang akan dikembalikan di"Sec-WebSocket-Accept"
header.
sumber
Jawaban:
Lihat
crypto.createHash()
fungsi dan terkaithash.update()
sertahash.digest()
fungsinya:sumber
Wajib: SHA1 rusak , Anda dapat menghitung tabrakan SHA1 seharga 45.000 USD . Anda harus menggunakan
sha256
:Untuk menjawab pertanyaan Anda dan membuat hash SHA1:
Kemudian:
atau
atau
Dokumen node resmi pada
crypto.createHash()
sumber
Object.toString()
dikembalikan[object Object]
secara default. Jadisha1sum({})
===sha1sum({"foo":"bar"})
===sha1sum({"a":1})
, dll.sha1sum
tidak akurat mengingat apa yang Anda katakan - ini jelas melakukan lebih dari apa yang dilakukan sha1 normal. Saya telah mengganti nama fungsi di jawaban.Silakan baca dan pertimbangkan saran saya di komentar posting Anda. Karena itu, jika Anda masih memiliki alasan bagus untuk melakukan ini, lihat daftar modul kripto untuk Node . Ini memiliki modul untuk menangani sha1 dan base64.
sumber
Tips untuk mencegah masalah (hash buruk):
Kita dapat menambahkan argumen biner untuk menggunakan string byte.
Anda dapat mencoba dengan: "\ xac", "\ xd1", "\ xb9", "\ xe2", "\ xbb", "\ x93", dll ...
Bahasa lain (Python, PHP, ...):
Nodejs:
sumber
'binary'
- Alias untuk'latin1'
nodejs.org/api/…binary
! Menggunakanbinary
ataulatin1
dalam penyandian akan kehilangan informasi dan meningkatkan kemungkinan tabrakan! Coba cuplikan di atas dengan dua contoh berikut:❤
dan⑤
Kamu bisa memakai:
Untuk menginstal:
sumber