SHA256散列需要多长时间?

问题描述:

我打算在密码+ salt上运行SHA256,但是我不知道在设置MySQL数据库时多长时间使我的VARCHAR。什么是好长度?SHA256散列需要多长时间?

+3

在任何人阅读本文之前,请务必遵循此建议并使用SHA- *'哈希密码,[请先阅读本文](https://security.stackexchan ge.com/questions/16354/whats-the-advantage-of-using-pbkdf2-vs-sha256-to-generate-an-aes-encryption-key)。 – c00000fd 2017-05-10 05:31:33

+0

具有示例的详细博客:http://sforsuresh.in/mysql_varchar_max_length/ – 2017-09-28 11:22:38

sha256的长度是256位 - 正如其名称所示。

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

而且演示:

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

会给你:

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

即具有64个字符的字符串。

+6

我们可以使用char(64)作为主键还是使用二进制(32)更好? (access_token) – frankish 2013-09-15 10:18:15

+3

如果您认为将来可能想阻止用户,那么我建议使用'varchar(65)'作为领先的'!'......只是说。 – Manatax 2014-03-09 21:42:01

+54

...或者只是添加一个'阻止'的列? – 2014-10-10 19:57:54

为什么要让它变成VARCHAR?它没有变化。它始终是64个字符,可以通过将任何内容运行到one of the online SHA-256 calculators来确定。

+0

是char(64)有效的mysql语句吗? – sepiroth 2010-02-10 23:07:23

+21

@hatorade:不,它不是一个声明,但它是一个有效的列类型。 – 2010-02-10 23:09:39

+9

varchar也不会分配空间,除非它被使用,与char不同,它会分配允许的总字符数量,不管是否有数据填充。 – Xenland 2013-02-11 16:44:14

这将是固定的64个字符,所以使用char(64)

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

您可以从(00到FF)中放置32位十六进制数字。

因此BINARY(32)!

+6

+1 - 我喜欢优化...给其他人在这发生......用于MySQL ...你可以使用'UPDATE ... SET hash_column = UNHEX(sha256HexString)'。然后,当检索它时,你选择HEX(hash_column)AS hash_column'。 – 2014-09-17 21:20:03

为SHA256的256个比特编码选项:

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

Base64是每4个字符3个字节,所以即使32个字节适合43个字符,实际上也需要44个。额外=被添加为最终字符 – Wilco 2015-06-02 21:23:59