2011-08-05 50 views

Trả lời

48

Sử dụng bcrypt nơi bạn muốn làm băm chậm và tốn kém tính toán - thường sẽ là băm mà bạn thực sự không muốn kẻ tấn công có thể đảo ngược băm, ví dụ: mật khẩu người dùng. Sử dụng mật mã gốc cho mọi thứ khác.

+3

Bạn có muốn giải thích thêm về lý do bcrypt tốt hơn/mạnh hơn không? Tôi giả sử nó sử dụng một băm mạnh hơn/dài hơn? Nó có sử dụng một thuật toán khác không? Nếu có hai mật khẩu tương tự, một mật khẩu được mã hóa với mật mã gốc và một mật mã với bcrypt chi phí ước tính trong thời gian để đảo ngược băm là gì? –

+5

Bcrypt sử dụng thuật toán Blowfish, có giai đoạn thiết lập khóa tốn kém tính toán. Sau đó nó sửa đổi nó để cho phép thiết lập khóa được lặp lại một số lần có thể cấu hình được - thường là một cái gì đó giống như 4.096 hiện tại, nhưng nó có thể được tăng lên khi phần cứng trở nên mạnh hơn. Sự khác biệt về độ khó đảo ngược giữa bcrypt và băm thông thường do đó phụ thuộc vào cấu hình bcrypt. –

12

Trong đồng hành với @ mike-scott của câu trả lời, bạn nên thích bcrypt cho các công cụ mật khẩu liên quan nhưng bạn vẫn có thể sử dụng crypto cho một loạt các nhiệm vụ như tạo thẻ ngẫu nhiên hoặc một checksum HMAC hoặc SHA1/MD5 băm:

var crypto = require('crypto'); 

// random tokens 
var buf = crypto.randomBytes(16).toString('hex'); 
console.log('Random token of %d bytes in hexadecimal: %s', buf.length, buf); 
var buf = crypto.randomBytes(16).toString('base64'); 
console.log('Random token of %d bytes in base 64: %s', buf.length, buf); 

// a hashed message authentication checksum (HMAC) using a shared secret key 
var string = 'My coffee please'; 
var key = 'Right away sir'; 

var encrypted = crypto.createHmac('sha1', key).update(string).digest('hex'); 
console.log('Encrypting "%s" using passphrase "%s": %s', string, key, encrypted); 

// a MD5 hash 
var hashmd5 = crypto.createHash('md5').update(string).digest('hex'); 
console.log('The MD5 hash of "%s" is %s', string, hashmd5); 

// a SHA1 hash 
var hashsha1 = crypto.createHash('sha1').update(string).digest('hex'); 
console.log('The SHA1 hash of "%s" is %s', string, hashsha1); 
Các vấn đề liên quan