SHA256哈希有多长?

Ton*_*ark 230 mysql sha256

我将SHA256使用密码+ salt 运行,但我不知道VARCHAR在设置MySQL数据库时需要多长时间.什么是好长度?

Pas*_*TIN 310

sha256长256位 - 正如其名称所示.

如果使用十六进制表示,则每个数字代码为4位; 所以你需要64位来表示256位 - 所以,你需要a varchar(64)或a char(64),因为长度总是相同的,根本不变.

和演示:

$hash = hash('sha256', 'hello, world!');
var_dump($hash);
Run Code Online (Sandbox Code Playgroud)

会给你 :

$ php temp.php
string(64) "68e656b251e67e8358bef8483ab0d51c6619f3e7a1a9f0e75838d41ff368f728"
Run Code Online (Sandbox Code Playgroud)

即一个64个字符的字符串.

  • ...或者只是添加"阻止"列? (94认同)
  • 我们可以使用char(64)作为主键,还是二进制(32)更好?(的access_token) (7认同)
  • 由于您希望为每个密码设置不同的盐,因此您必须将其存储在哈希旁边.为此,您可以使用额外字段或将其附加/添加到哈希,因此您将需要超过64个字符 (5认同)
  • 你可以使用这个select语句来测试它:`SELECT length(to_base64(unhex(sha2('向我的小朋友问好',256)))`,无论原始字符串的长度是多少,它总是44. (4认同)
  • 如果您认为将来可能想阻止某个用户,那么我建议使用`varchar(65)`来表示领先的`!`.... (3认同)

Ric*_*kNZ 63

SHA256的256位编码选项:

  1. Base64:每个字符6位= CHAR(44)包括填充字符
  2. 十六进制:每个字符4位= CHAR(64)
  3. 二进制:每字节8位= BINARY(32)

  • Base64是每4个字符3个字节,所以即使32个字节适合43个字符,你实际上也需要44.一个额外的=被添加为最后一个字符 (29认同)
  • 好吧,`=` 可以去掉并重新添加。 (3认同)

mar*_*rem 26

我更喜欢使用BINARY(32),因为它是优化的方式!

您可以在(00到FF)中放置32个十六进制数字.

因此BINARY(32)!

  • +1 - 我喜欢优化...对其他任何人发生这种情况......将它与MySQL一起使用......你可以使用`UPDATE ... SET hash_column = UNHEX(sha256HexString)`.然后,当检索它时,你`SELECT HEX(hash_column)AS hash_column`. (8认同)

cee*_*yoz 21

你为什么要把它变成VARCHAR?它没有变化.它总是64个字符,可以通过在任何一个在线SHA-256计算器中运行任何东西来确定.

  • @hatorade:不,它不是一个声明,但它是一个有效的列类型. (27认同)
  • varchar也不会分配空间,除非使用它,与char不同,它分配了允许的总字符数量,无论是否有数据填充它. (10认同)

小智 6

它将固定64个字符,所以使用 char(64)

  • 并使用“字符集 ascii”。 (2认同)