2011-10-24 15 views
3

私は自分のパスワードをハッシュ化するために、この機能を使用します。64ビットのパスワードハッシュ

// RETURNS: rAyZOnlNBxO2WA53z2rAtFlhdS+M7kec9hskSCpeL6j+WwcuUvfFbpFJUtHvv7ji 
base64_encode(hash_hmac('sha384', $str . SC_NONCE, SC_SITEKEY, true)); 

そして、私は CHAR(64)フィールド(MySQLの-InnoDB)にハッシュを格納します。

char(64)の代わりにvarchar(64)を使用する必要がありますか?どうして?

編集: 私はSHA384SHA256を変更しました。この例では、sha256は常に44バイトを返します。混乱して申し訳ありません。今は64バイトです。

+1

ベース64のエンコードされた文字列が64ビット長のハッシュを返すのは間違いありませんか?私はそうは思わなかった... –

+0

@BrendanBullen - 私は質問を更新しました。混乱している例のため申し訳ありません:( – dino

答えて

4

varcharsは、必要な長さだけを使用して保存を保存します。 64ビットのハッシュが常に64の場合、ストレージの点で違いはありません。この場合、charはvarcharと同じくらい良いでしょう。

保存する可変長データがある場合、varcharは無駄なスペースを無駄にしません。

+2

実際にcharと比較してvarcharで1バイトのオーバーヘッドを使用していますが、その違いは別の話です:) – Marcus

5

ハッシュが固定されているので、CHAR(64)を使用する必要があります。 VARCHARを使用すると別のバイトが追加され、スペースが無駄になります。

+0

固定長ですか? –

2

Base 64でエンコードされた文字列を使用していても、結果の長さは必ずしも64ビットではありません。この場合、結果は64ビットよりも短くなる可能性があるため、VARCHARが優れています。

実際にはhereと表示されているように、64ビットは設定された長さではなく最大長です。

+0

私は質問Brandonを更新しました。 – dino

3

ハッシュをバイナリ形式で保存することもできます(実際にスペースについて気になる場合)。それを行う方法の詳細については、hereを参照してください。おそらくSHA-256ハッシュのためにBINARY(32)が必要でしょう。

関連する問題