web-dev-qa-db-ja.com

NodeJS:bcrypt vsネイティブ暗号

誰かが2つとそれぞれを使用する例の状況の違いを指摘できますか?

bcryptは素晴らしいですね。

58
fancy

低速で計算コストの高いハッシュを実行する場合はbcryptを使用します。これは通常、攻撃者がハッシュを元に戻せるようにしたくないハッシュの場合です。ユーザーパスワード。それ以外の場合はすべてネイティブ暗号を使用します。

67
Mike Scott

@ mike-scottの回答と組み合わせて、パスワード関連のものにはbcryptを優先する必要がありますが、ランダムトークンの作成やHMACチェックサムやSHA1などの幅広いタスクにcryptoを使用できます。/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); 
18
Igor Parra

Nodejsのネイティブ暗号ライブラリを使用します

誰が何を上手にできるかに基づいて決定するのではなく、それだけではない

Node.jsに暗号化用の組み込みモジュールが含まれていた理由を知っておく必要がありますが、それはもともとnode.jsの一部ではなく、bcryptを含む多くのライブラリがnpmリポジトリで人気がありました

その理由は、暗号化は重要なセキュリティの側面であり、npmの外部モジュールを使用すると、悪意のあるコードが挿入される可能性があり、元のセキュリティ目標を達成できないためです。

したがって、そのような暗号化機能のための信頼できるライブラリが必要です。これは、nodejsがそのようなライブラリを提供する動機でした

暗号化方式が強力ではないと思われる場合は、外部ライブラリを盲目的に信頼するのではなく、同じようにnodejsで問題を提起してください

それでも私を信じませんか?この記事を読む https://hackernoon.com/im-harvesting-credit-card-numbers-and-passwords-from-your-site-here-s-how-9a8cb347c5b5

1
Basav