scryptでハッシュされたパスワードをデータベースに保存したいと思います。期待できる最大の長さはどれくらいですか?
3827 次
2 に答える
10
https://github.com/wg/scryptによると、出力形式は$s0$params$salt$key
次のとおりです。
s0
は、128 ビットのソルトと 256 ビットの派生キーを使用して、形式のバージョン 0 を示します。params
log2(N) (16 ビット)、r (8 ビット)、および p (8 ビット) を含む 32 ビットの 16 進整数です。salt
base64 でエンコードされたソルトです。key
base64 でエンコードされた派生キーです。
https://stackoverflow.com/a/13378842/14731によると、base64 でエンコードされた文字列の長さは、エンコードされているバイト数を示します。
n
これを分解してみましょう:
- ドル記号は 4 文字を構成します。
- バージョン番号は 2 文字で構成されます。
- 各 16 進文字は 4 ビット
( log2(16) = 4 )
を表すため、params
フィールドは (32 ビット / 4 ビット) = 8 文字になります。 - 128 ビットのソルトは 16 バイトに相当します。base64 でエンコードされた形式は、
(4 * ceil(16 / 3))
24 文字で構成されます。 - 256 ビットの派生キーは 32 バイトに相当します。base64 でエンコードされた形式は、
(4 * ceil(32 / 3))
44 文字を構成します。
すべてをまとめると、次のようになります。4 + 2 + 8 + 24 + 44
= 82 文字.
于 2014-06-01T23:31:17.337 に答える
2
Colin Percival 自身の実装では、tarsnap scrypt ヘッダーは 96 バイトです。これには以下が含まれます。
- 6バイト「暗号」
- 10 バイト N、r、p パラメータ
- 32 バイトのソルト
- バイト 0 ~ 47 の 16 バイト SHA256 チェックサム
- バイト 0 ~ 63 の 32 バイト HMAC ハッシュ (キーとして scrypt ハッシュを使用)
これは、 node-scryptで使用される形式でもあります。チェックサムと HMAC ハッシュの背後にある理論的根拠の説明がstackexchangeにあります。
base64 でエンコードされた文字列として、これは 128 文字になります。
于 2016-11-12T00:57:19.253 に答える