web-dev-qa-db-ja.com

NodeJS:base64でエンコードされた文字列をバイナリにデコードする方法は?

私はsaltを使ってパスワードハッシュを実装していたので、バイナリとしてsaltを生成し、パスワードをハッシュし、パスワードをbase64でエンコードし、それからそれらをデータベースに保存しました。

パスワードをチェックするときに、saltをバイナリデータにデコードし、それを使用して提供されたパスワードをハッシュし、結果をbase64でエンコードして、結果がデータベース内のものと一致するかどうかを確認します。

問題は、saltをバイナリデータに復号化する方法が見つからないことです。 Buffer.toStringメソッドを使ってそれらをエンコードしましたが、逆の機能はないようです。

225
Xavier_Ex

Node.js v6.0.0では を使用しているため、コンストラクタメソッドは推奨されなくなり 、次のメソッドを使用する必要があります。代わりに、base64でエンコードされた文字列から新しいバッファを構築するために使用されます。

var b64string = /* whatever */;
var buf = Buffer.from(b64string, 'base64'); // Ta-da

Node.js v5.11.1以前の場合

新しいBufferを作成し、 2番目の引数として'base64'を渡します。

var b64string = /* whatever */;
var buf = new Buffer(b64string, 'base64'); // Ta-da

きれいにしたいのなら、fromが存在するかどうかをチェックすることができます。

if (typeof Buffer.from === "function") {
    // Node 5.10+
    buf = Buffer.from(b64string, 'base64'); // Ta-da
} else {
    // older Node versions, now deprecated
    buf = new Buffer(b64string, 'base64'); // Ta-da
}
504
Matt Ball