Apa yang sedang dilakukan fungsi s.on ()? Apakah ini mendaftarkan fungsi md5sum.update (d) untuk mengeksekusi setiap kali ada data yang dibaca dari ReadStream?
Woot woot, jika Anda melakukannya require('crypto').createHash('md5').update(STRING_TO_BE_HASHED).digest("hex")Anda punya satu-liner. Salut kawan!
balupton
3
Sedang mendapatkan beberapa masalah menggunakan .updatebeberapa kali ( github.com/joyent/node/issues/749 ) ketika mencoba menggunakan timbooosolusi, menggunakan one-liner memperbaikinya (karena objek hash diciptakan kembali setiap waktu).
Maks
Adakah cara untuk mengubah panjang string? Tidak hanya 32 karakter, 64 atau 128 atau nomor yang berbeda.
Mikel
@Mikel coba jika ada algoritma hash lain yang sesuai dengan kebutuhan Anda, md5 selalu 32 karakter.
Ikatan
Jika saya memiliki banyak string untuk hash, itu kurang efisien untuk terus memanggil crypto.createHash daripada entah bagaimana menggunakan kembali hasilnya?
Michael
81
API modul crypto Node masih tidak stabil.
Pada versi 4.0.0, modul Crypto asli tidak lagi stabil. Dari dokumentasi resmi :
Crypto
Stabilitas: 2 - Stabil
API telah terbukti memuaskan. Kompatibilitas dengan ekosistem npm adalah prioritas tinggi, dan tidak akan rusak kecuali benar-benar diperlukan.
Jadi, harus dianggap aman untuk menggunakan implementasi asli, tanpa ketergantungan eksternal.
Untuk referensi, modul yang disebutkan di bawah ini disarankan sebagai solusi alternatif ketika modul Crypto masih tidak stabil.
Anda juga dapat menggunakan salah satu modul sha1 atau md5 yang berfungsi baik.
$ npm install sha1
lalu
var sha1 = require('sha1');var hash = sha1("my message");
console.log(hash);// 104ab42f1193c336aa2cf08a2c946d5c6fd0fcdb
atau
$ npm install md5
lalu
var md5 = require('md5');var hash = md5("my message");
console.log(hash);// 8ba6c19dc1def5702ff5acbf2aeea5aa
(MD5 tidak aman tetapi sering digunakan oleh layanan seperti Gravatar.)
Saya pikir jauh lebih mudah dan efisien untuk menggunakan Crypto daripada membawa modul baru.
Valjas
6
Dari dokumen Node.js saat ini: "Stabilitas: 2 - Tidak stabil; Perubahan API sedang dibahas untuk versi yang akan datang. Memutuskan perubahan akan diminimalkan." API modul saya tidak akan berubah. Ketika saya awalnya menulis modul, tidak adacrypto modul yang dibangun ke platform. Keuntungan lain adalah Anda dapat menggunakan modul saya di server dan juga di sisi klien. Tapi itu sepenuhnya terserah Anda, perpustakaan apa yang Anda gunakan.
pvorb
7
Membangun hash Crypto terus memberi saya BS 'hash pembaruan gagal'. Akhirnya saya pindah ke modul MD5 dan bekerja dengan baik. Juga lebih mudah untuk dipanggil (sedikit). Terima kasih.
GJK
2
+1 untuk opsi yang menjauh dari (2) - Sifat tidak stabil dari API Crypto!
Saham Geek
1
Saya telah memperbaiki masalah aneh sha1 pada node 0.11.x pada mesin Windows saya dengan menukar kripto standar yang digunakan untuk modul ini.
Bartvds
24
sha256("string or binary");
Saya mengalami masalah dengan jawaban lain. Saya menyarankan Anda untuk mengatur argumen pengkodean binaryuntuk menggunakan string byte dan mencegah hash yang berbeda antara Javascript (NodeJS) dan bahasa lain / layanan seperti Python, PHP, Github ...
Jika Anda tidak menggunakan kode ini, Anda bisa mendapatkan hash berbeda antara NodeJS dan Python ...
Cara mendapatkan hash yang sama dengan Python, PHP, Perl, Github (dan mencegah masalah):
NodeJS mem-hashing representasi string UTF-8. Bahasa lain (seperti Python, PHP atau PERL ...) hashing byte string.
Kita bisa menambahkan argumen biner untuk menggunakan string byte.
Kode:
const crypto = require("crypto");function sha256(data){return crypto.createHash("sha256").update(data,"binary").digest("base64");// ------ binary: hash the byte string}
sha256("string or binary");
Dokumentasi:
crypto.createHash (algoritma [, opsi]): Algoritma ini tergantung pada algoritma yang tersedia yang didukung oleh versi OpenSSL pada platform.
hash.digest ([encoding]): Encoding dapat berupa 'hex', 'latin1' atau 'base64'. (base 64 lebih panjang).
Anda bisa mendapatkan masalah dengan: sha256 ("\ xac"), "\ xd1", "\ xb9", "\ xe2", "\ xbb", "\ xbb", "\ x93", dll ...
Bahasa lain (seperti PHP, Python, Perl ...) dan solusi saya dengan .update(data, "binary"):
Di sini Anda dapat membandingkan semua hash yang didukung pada perangkat keras Anda, didukung oleh versi node.js. Beberapa di antaranya adalah kriptografi, dan beberapa hanya untuk sebuah checksum. Ini menghitung "Hello World" 1 juta kali untuk setiap algoritma. Diperlukan waktu sekitar 1-15 detik untuk setiap algoritme (Diuji pada Mesin Komputasi Google Standar dengan Node.js 4.2.2).
Saya menggunakan blueimp-md5 yang "Kompatibel dengan lingkungan sisi server seperti Node.js, pemuat modul seperti RequireJS, Browserify atau webpack dan semua browser web."
Gunakan seperti ini:
var md5 = require("blueimp-md5");var myHashedString = createHash('GreensterRox');
createHash(myString){return md5(myString);}
Jika melewati nilai hash di sekitar di tempat terbuka, selalu ide yang bagus untuk membuatnya jadi lebih sulit bagi orang untuk membuatnya kembali:
createHash(myString){var salt ='HnasBzbxH9';return md5(myString+salt);}
function md5(a){var r =0,
c ="";return h(a);function h(t){return u(l(m(t)))}function l(t){return p(g(f(t),8* t.length))}function u(t){for(var e, i = r ?"0123456789ABCDEF":"0123456789abcdef", n ="", o =0; o < t.length; o++)
e = t.charCodeAt(o),
n += i.charAt(e >>>4&15)+ i.charAt(15& e);return n
}function m(t){for(var e, i, n ="", o =-1;++o < t.length;)
e = t.charCodeAt(o),
i = o +1< t.length ? t.charCodeAt(o +1):0,55296<= e && e <=56319&&56320<= i && i <=57343&&(e =65536+((1023& e)<<10)+(1023& i),
o++),
e <=127? n +=String.fromCharCode(e): e <=2047? n +=String.fromCharCode(192| e >>>6&31,128|63& e): e <=65535? n +=String.fromCharCode(224| e >>>12&15,128| e >>>6&63,128|63& e): e <=2097151&&(n +=String.fromCharCode(240| e >>>18&7,128| e >>>12&63,128| e >>>6&63,128|63& e));return n
}function f(t){for(var e =Array(t.length >>2), i =0; i < e.length; i++)
e[i]=0;for(i =0; i <8* t.length; i +=8)
e[i >>5]|=(255& t.charCodeAt(i /8))<< i %32;return e
}function p(t){for(var e ="", i =0; i <32* t.length; i +=8)
e +=String.fromCharCode(t[i >>5]>>> i %32&255);return e
}function g(t, e){
t[e >>5]|=128<< e %32,
t[14+(e +64>>>9<<4)]= e;for(var i =1732584193, n =-271733879, o =-1732584194, s =271733878, a =0; a < t.length; a +=16){var r = i,
c = n,
h = o,
l = s;
n = E(n = E(n = E(n = E(n = N(n = N(n = N(n = N(n = C(n = C(n = C(n = C(n = S(n = S(n = S(n = S(n, o = S(o, s = S(s, i = S(i, n, o, s, t[a +0],7,-680876936), n, o, t[a +1],12,-389564586), i, n, t[a +2],17,606105819), s, i, t[a +3],22,-1044525330), o = S(o, s = S(s, i = S(i, n, o, s, t[a +4],7,-176418897), n, o, t[a +5],12,1200080426), i, n, t[a +6],17,-1473231341), s, i, t[a +7],22,-45705983), o = S(o, s = S(s, i = S(i, n, o, s, t[a +8],7,1770035416), n, o, t[a +9],12,-1958414417), i, n, t[a +10],17,-42063), s, i, t[a +11],22,-1990404162), o = S(o, s = S(s, i = S(i, n, o, s, t[a +12],7,1804603682), n, o, t[a +13],12,-40341101), i, n, t[a +14],17,-1502002290), s, i, t[a +15],22,1236535329), o = C(o, s = C(s, i = C(i, n, o, s, t[a +1],5,-165796510), n, o, t[a +6],9,-1069501632), i, n, t[a +11],14,643717713), s, i, t[a +0],20,-373897302), o = C(o, s = C(s, i = C(i, n, o, s, t[a +5],5,-701558691), n, o, t[a +10],9,38016083), i, n, t[a +15],14,-660478335), s, i, t[a +4],20,-405537848), o = C(o, s = C(s, i = C(i, n, o, s, t[a +9],5,568446438), n, o, t[a +14],9,-1019803690), i, n, t[a +3],14,-187363961), s, i, t[a +8],20,1163531501), o = C(o, s = C(s, i = C(i, n, o, s, t[a +13],5,-1444681467), n, o, t[a +2],9,-51403784), i, n, t[a +7],14,1735328473), s, i, t[a +12],20,-1926607734), o = N(o, s = N(s, i = N(i, n, o, s, t[a +5],4,-378558), n, o, t[a +8],11,-2022574463), i, n, t[a +11],16,1839030562), s, i, t[a +14],23,-35309556), o = N(o, s = N(s, i = N(i, n, o, s, t[a +1],4,-1530992060), n, o, t[a +4],11,1272893353), i, n, t[a +7],16,-155497632), s, i, t[a +10],23,-1094730640), o = N(o, s = N(s, i = N(i, n, o, s, t[a +13],4,681279174), n, o, t[a +0],11,-358537222), i, n, t[a +3],16,-722521979), s, i, t[a +6],23,76029189), o = N(o, s = N(s, i = N(i, n, o, s, t[a +9],4,-640364487), n, o, t[a +12],11,-421815835), i, n, t[a +15],16,530742520), s, i, t[a +2],23,-995338651), o = E(o, s = E(s, i = E(i, n, o, s, t[a +0],6,-198630844), n, o, t[a +7],10,1126891415), i, n, t[a +14],15,-1416354905), s, i, t[a +5],21,-57434055), o = E(o, s = E(s, i = E(i, n, o, s, t[a +12],6,1700485571), n, o, t[a +3],10,-1894986606), i, n, t[a +10],15,-1051523), s, i, t[a +1],21,-2054922799), o = E(o, s = E(s, i = E(i, n, o, s, t[a +8],6,1873313359), n, o, t[a +15],10,-30611744), i, n, t[a +6],15,-1560198380), s, i, t[a +13],21,1309151649), o = E(o, s = E(s, i = E(i, n, o, s, t[a +4],6,-145523070), n, o, t[a +11],10,-1120210379), i, n, t[a +2],15,718787259), s, i, t[a +9],21,-343485551),
i = v(i, r),
n = v(n, c),
o = v(o, h),
s = v(s, l)}return[i, n, o, s]}function _(t, e, i, n, o, s){return v((a = v(v(e, t), v(n, s)))<<(r = o)| a >>>32- r, i);var a, r
}function S(t, e, i, n, o, s, a){return _(e & i |~e & n, t, e, o, s, a)}function C(t, e, i, n, o, s, a){return _(e & n | i &~n, t, e, o, s, a)}function N(t, e, i, n, o, s, a){return _(e ^ i ^ n, t, e, o, s, a)}function E(t, e, i, n, o, s, a){return _(i ^(e |~n), t, e, o, s, a)}function v(t, e){var i =(65535& t)+(65535& e);return(t >>16)+(e >>16)+(i >>16)<<16|65535& i
}}
string ='hello';
console.log(md5(string));
Bahkan jika hash bukan untuk keamanan, Anda dapat menggunakan sha bukan md5. Menurut pendapat saya, orang-orang harus melupakan md5 untuk saat ini, ini di masa lalu!
Nodejs sha256 normal sudah usang. Jadi, Anda memiliki dua alternatif untuk saat ini:
var shajs = require('sha.js')- https://www.npmjs.com/package/sha.js (used by Browserify)var hash = require('hash.js')- https://github.com/indutny/hash.js
Saya lebih suka menggunakan shajsbukan hash, karena saya menganggap sha fungsi hash terbaik saat ini dan Anda tidak memerlukan fungsi hash yang berbeda untuk saat ini. Jadi untuk mendapatkan hash dalam hex Anda harus melakukan sesuatu seperti berikut:
Jawaban:
Lihatlah crypto.createHash (algoritma)
sumber
Jika Anda hanya ingin md5 hash string sederhana saya menemukan ini berfungsi untuk saya.
sumber
require('crypto').createHash('md5').update(STRING_TO_BE_HASHED).digest("hex")
Anda punya satu-liner. Salut kawan!.update
beberapa kali ( github.com/joyent/node/issues/749 ) ketika mencoba menggunakantimbooo
solusi, menggunakan one-liner memperbaikinya (karena objek hash diciptakan kembali setiap waktu).API modul crypto Node masih tidak stabil.Pada versi 4.0.0, modul Crypto asli tidak lagi stabil. Dari dokumentasi resmi :
Jadi, harus dianggap aman untuk menggunakan implementasi asli, tanpa ketergantungan eksternal.
Untuk referensi, modul yang disebutkan di bawah ini disarankan sebagai solusi alternatif ketika modul Crypto masih tidak stabil.
Anda juga dapat menggunakan salah satu modul sha1 atau md5 yang berfungsi baik.
lalu
atau
lalu
(MD5 tidak aman tetapi sering digunakan oleh layanan seperti Gravatar.)
API modul-modul ini tidak akan berubah!
sumber
crypto
modul yang dibangun ke platform. Keuntungan lain adalah Anda dapat menggunakan modul saya di server dan juga di sisi klien. Tapi itu sepenuhnya terserah Anda, perpustakaan apa yang Anda gunakan.Saya mengalami masalah dengan jawaban lain. Saya menyarankan Anda untuk mengatur argumen pengkodean
binary
untuk menggunakan string byte dan mencegah hash yang berbeda antara Javascript (NodeJS) dan bahasa lain / layanan seperti Python, PHP, Github ...Jika Anda tidak menggunakan kode ini, Anda bisa mendapatkan hash berbeda antara NodeJS dan Python ...
Cara mendapatkan hash yang sama dengan Python, PHP, Perl, Github (dan mencegah masalah):
Kita bisa menambahkan argumen biner untuk menggunakan string byte.
Kode:
Dokumentasi:
Anda bisa mendapatkan masalah dengan: sha256 ("\ xac"), "\ xd1", "\ xb9", "\ xe2", "\ xbb", "\ xbb", "\ x93", dll ...
Bahasa lain (seperti PHP, Python, Perl ...) dan solusi saya dengan
.update(data, "binary")
:Nodejs secara default (tanpa biner):
sumber
The
crypto
modul membuat ini sangat mudah.Mempersiapkan:
Pemakaian:
sumber
Di sini Anda dapat membandingkan semua hash yang didukung pada perangkat keras Anda, didukung oleh versi node.js. Beberapa di antaranya adalah kriptografi, dan beberapa hanya untuk sebuah checksum. Ini menghitung "Hello World" 1 juta kali untuk setiap algoritma. Diperlukan waktu sekitar 1-15 detik untuk setiap algoritme (Diuji pada Mesin Komputasi Google Standar dengan Node.js 4.2.2).
Hasil:
DSA: 1992ms
DSA-SHA: 1960ms
DSA-SHA1: 2062ms
DSA-SHA1-old: 2124ms
RSA-MD4: 1893ms
RSA-MD5: 1982ms
RSA-MDC2: 2797ms
RSA-RIPEMD160: 2101ms
RSA-SHA: 1948ms
RSA- SHA: : 1908ms
RSA-SHA1-2: 2042ms
RSA-SHA224: 2176ms
RSA-SHA256: 2158ms
RSA-SHA384: 2290ms
RSA-SHA512: 2357ms
dsaEncryption: 1936ms
dsaWithSHA: 1910ms
dsaWithSHA1: 1926ms
DSS1: 1928ms
ECDSA-dengan-SHA1: 1880ms
MD4: 1833ms
md4WithRSAEncryption: 1925ms
md5: 1863ms
md5WithRSAEncryption: 1923ms
mdc2: 2729ms
mdc2WithRSA: 2890ms
RIPEMD: 2101ms
ripemd160: 2153ms
ripemd160WithRSA: 2210ms
rmd160: 2146ms
sha: 1929ms
sha1: 1880ms
sha1WithRSAEncryption: 1957ms
sha224: 2121ms
sha224WithRSAEncryption: 2290ms
SHA256: 2134ms
sha256WithRSAEncryption: 2190ms
SHA384: 2181ms
sha384WithRSAEncryption: 2343ms
SHA512: 2371ms
sha512WithRSAEncryption: 2434ms
shaWithRSAEncryption: 1966ms
ssl2- md5: 1853ms
ssl3-md5: 1868ms
ssl3-sha1: 1971ms
pusaran air: 2578ms
sumber
RSA-
awalan?Simple One Liners:
Jika Anda ingin hash teks UTF8:
Jika Anda ingin mendapatkan hash yang sama dengan Python, PHP, Perl, Github:
Anda juga dapat mengganti
'sha256'
dengan'sha1'
,'md5'
,'sha256'
,'sha512'
sumber
Mempertimbangkan pemikiran dari http://www.thoughtcrime.org/blog/the-cryptographic-doom-principle/ (singkatnya: mengenkripsi FIRST, MAKA autentikasi. Setelah itu FIRST memverifikasi, MAKA mendekripsi) Saya telah mengimplementasikan solusi berikut dalam node. js:
Itu dapat diuji dengan:
Semoga ini membantu :-)
sumber
Saya menggunakan blueimp-md5 yang "Kompatibel dengan lingkungan sisi server seperti Node.js, pemuat modul seperti RequireJS, Browserify atau webpack dan semua browser web."
Gunakan seperti ini:
Jika melewati nilai hash di sekitar di tempat terbuka, selalu ide yang bagus untuk membuatnya jadi lebih sulit bagi orang untuk membuatnya kembali:
sumber
sumber
Bahkan jika hash bukan untuk keamanan, Anda dapat menggunakan sha bukan md5. Menurut pendapat saya, orang-orang harus melupakan md5 untuk saat ini, ini di masa lalu!
Nodejs sha256 normal sudah usang. Jadi, Anda memiliki dua alternatif untuk saat ini:
Saya lebih suka menggunakan
shajs
bukanhash
, karena saya menganggap sha fungsi hash terbaik saat ini dan Anda tidak memerlukan fungsi hash yang berbeda untuk saat ini. Jadi untuk mendapatkan hash dalam hex Anda harus melakukan sesuatu seperti berikut:sumber