2011-08-05 2 views

답변

48

느리고 계산 상 비싼 해싱을 수행하려는 곳에 bcrypt를 사용하십시오. 일반적으로 공격자가 해시를 되돌릴 수 없도록하려는 해시 용입니다 (예 : 사용자 암호. 그 외 모든 것에 원시 암호화를 사용하십시오. 에서 @ 마이크 - 스콧의 대답에 동반자에서

+3

왜 bcrypt가 더 좋고/더 강한 지 자세히 설명해 주시겠습니까? 나는 그것이 더 강하고 더 긴 해시를 사용한다고 가정한다. 그것은 다른 알고리즘을 사용합니까? 이렇게 두 개의 유사한 암호가 주어지면, 하나는 원시 암호로 해시되고, 하나는 bcrypt로 해시 반전에 소요되는 예상 비용은 무엇입니까? –

+5

Bcrypt는 계산적으로 비싼 키 설정 단계가있는 Blowfish 알고리즘을 사용합니다. 그런 다음 키 설정을 구성 가능한 횟수만큼 반복 할 수 있도록 수정합니다. 일반적으로 현재는 4,096과 비슷하지만 하드웨어가 더 강력 해짐에 따라 키 수를 늘릴 수 있습니다. 따라서 bcrypt와 일반 해시 간의 역방향 해시의 차이점은 bcrypt 구성에 따라 다릅니다. –

12

, 당신은 암호와 관련된 물건 bcrypt을 선호해야하지만 여전히 당신은 작업의 광범위한 crypto를 사용할 수있는 임의의 토큰 또는 HMAC 체크섬 또는 SHA1은 MD5 해시 /를 만들 좋아 :

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);