我将在密码加盐后运行SHA256
算法,但是在设置MySQL数据库时不知道该将VARCHAR
字段长度设为多少。有什么好的长度建议吗?
SHA256是一个256位长的哈希函数。根据其名称,它返回一个十六进制表示。
由于sha256返回一个十六进制表示,因此4位就足以编码每个字符(与ASCII相比需要8位),所以256位将代表64个十六进制字符,因此您需要一个varchar(64)
, 甚至一个char(64)
, 因为长度始终相同,不会变化。
以下是演示:
$hash = hash('sha256', 'hello, world!');
var_dump($hash);
我会为您提供:
$ php temp.php
string(64) "68e656b251e67e8358bef8483ab0d51c6619f3e7a1a9f0e75838d41ff368f728"
varchar(65)
作为一个前导的 !
……仅仅是说一下。 - ManataxSELECT length(to_base64(unhex(sha2('say hello to my little friend',256))))
,无论原始字符串的长度如何,结果始终为44。 - DrAhmedJavaSHA256的256位编码选项:
CHAR(44)
(包括填充字符)CHAR(64)
BINARY(32)
=``=
符号可以被添加和去除。 - Rick James我喜欢使用BINARY(32),因为这是优化的方法!
你可以在其中放置从(00至FF)的32个十六进制数字。
因此,选择BINARY(32)!
UPDATE...SET hash_column=UNHEX(sha256HexString)
。然后,当检索时,你可以使用 SELECT HEX(hash_column) AS hash_column
。 - Kevin Nelson你为什么要将它定义为VARCHAR类型?它的长度是不变的。它始终是64个字符,可以通过在在线SHA-256计算器中输入任何内容来确定。
长度将固定为64个字符,因此请使用char(64)
字符集 ascii
。 - Rick James
SHA-*
来进行密码哈希之前,请务必先阅读此文。请注意不要改变原意,尽可能使内容通俗易懂,但不提供解释或其他信息。 - c00000fdcrypt
示例代码。SHA-x对于口令短语来说是可以的,只要你知道你在做什么。 - EMLn
次来破解明文密码,那么添加一个16字节的盐意味着必须运行n * 256^16
次。即使密码本身非常简单-比如只有一个可打印字符-那么SHA-x也必须运行3 * 10^40
次才能测试所有可能性。如果您拥有一个以每秒11十亿个SHA-256操作运行的GPU设置,则需要3 * 10^30
秒。这比宇宙的年龄多得多。因此,SHA-x“快速”的事实是完全无关紧要的。 - EML