SHA256ハッシュはどのくらいの長さですか?


244

SHA256パスワードとソルトで実行しますがVARCHAR、MySQLデータベースをセットアップするときにどれくらいの時間がかかるかわかりません。良い長さとは何ですか?


9
これを読む人がこのアドバイスに従い、SHA-*パスワードをハッシュするのに使用する前に、まずこれを読んでください
c00000fd 2017年

2
パスワードでSHA-256を使用していない場合を除き、ハッシュの長さは256ビット、64桁の16進文字、43桁の英数字、または32バイトです。
CAW

回答:


331

sha256は256ビット長です-その名前が示すように。

SHA256は16進表現を返すので、4ビットは、したがって、あなたが必要なので、256ビットは64進文字を表すであろう、(ASCIIのためのように、8の代わりに)各文字をエンコードするのに十分でvarchar(64)あっても、またはchar(64)長さが常に同じであるように、 、まったく変化しません。

そしてデモ:

$hash = hash('sha256', 'hello, world!');
var_dump($hash);

あなたに与えるでしょう:

$ php temp.php
string(64) "68e656b251e67e8358bef8483ab0d51c6619f3e7a1a9f0e75838d41ff368f728"

つまり、64文字の文字列です。


7
char(64)を主キーとして使用できますか、それともbinary(32)の方が適していますか?(access_token)
フランキー語2013

3
将来的にユーザーをブロックしたい場合varchar(65)は、リーディングに使用することをお勧めし!ます。
Manatax 2014年

103
...または単に「ブロックされた」列を追加しますか?
Stijn de Witt

5
パスワードごとに異なるソルトが必要な場合は、ハッシュの横にこれを保存する必要があります。これには、追加のフィールドを使用するか、ハッシュの前/後に追加できるため、64文字以上が必要になります
Patrick Cornelissen

4
このselectステートメントを使用してテストできます:SELECT length(to_base64(unhex(sha2('say hello to my little friend',256))))、元の文字列の長さがどうであれ、常に44です。
DrAhmedJava 2017

72

SHA256の256ビットのエンコードオプション:

  1. Base64:1文字あたり6ビット= CHAR(44)パディング文字を含む
  2. 16進数:1文字あたり4ビット= CHAR(64)
  3. バイナリ:1バイトあたり8ビット= BINARY(32)

30
Base64は4文字あたり3バイトなので、32バイトは43文字に収まりますが、実際には44が必要です。最後の文字として余分な=が追加されます
Wilco

2
まあ、=はがして再度追加することができます。
リックジェームズ

28

最適化された方法であるため、BINARY(32)を使用することを好みます!

32桁の16進数(00からFF)に配置できます。

したがって、BINARY(32)!


8
+1-私は最適化したい...これで起こっている誰かに...これをMySQLで使用する...あなたは使用できますUPDATE...SET hash_column=UNHEX(sha256HexString)。次に、それを取得するときに、あなたSELECT HEX(hash_column) AS hash_column
Kevin Nelson

22

なぜVARCHARにしますか?それは変わりません。常に64文字です。これは、オンラインのSHA-256計算機のいずれかを実行することで決定できます。


char(64)は有効なmysqlステートメントですか?
トニースターク

28
@hatorade:いいえ、これはステートメントではありませんが、有効な列タイプです。
マークバイアーズ

10
varcharは、charとは異なり、使用されている場合を除いて領域を割り当てません。charとは異なり、データがいっぱいかどうかに関係なく、許可される合計文字数を割り当てます。
Xenland 2013

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.