nik*_*sfi 155 mysql hash database-design sha1
当我想在SHA数据库中存储SHA1哈希的结果时,我遇到了一个简单的问题:
VARCHAR字段应该在多长时间内存储哈希的结果?
Gum*_*mbo 307
我将VARCHAR
用于可变长度数据,但不使用固定长度数据.因为SHA-1值总是 160位长,所以VARCHAR
只会在固定长度字段的长度上浪费一个额外的字节.
而且我也不会存储SHA1
返回的值.因为它每个字符仅使用4位,因此需要160/4 = 40个字符.但是如果你每个字符使用8位,你只需要一个160/8 = 20个字符的长字段.
所以我建议你使用BINARY(20)
和UNHEX
函数将SHA1
值转换为二进制.
我比较了BINARY(20)
和的存储要求CHAR(40)
.
CREATE TABLE `binary` (
`id` int unsigned auto_increment primary key,
`password` binary(20) not null
);
CREATE TABLE `char` (
`id` int unsigned auto_increment primary key,
`password` char(40) not null
);
Run Code Online (Sandbox Code Playgroud)
百万条记录binary(20)
需要44.56M,而char(40)
需要64.57M.
InnoDB
发动机.
Anv*_*esh 11
下面是散列算法列表及其需求位大小:
创建一个带需要CHAR(n)的样本表:
CREATE TABLE tbl_PasswordDataType
(
ID INTEGER
,MD5_128_bit CHAR(32)
,SHA_160_bit CHAR(40)
,SHA_224_bit CHAR(56)
,SHA_256_bit CHAR(64)
,SHA_384_bit CHAR(96)
,SHA_512_bit CHAR(128)
);
INSERT INTO tbl_PasswordDataType
VALUES
(
1
,MD5('SamplePass_WithAddedSalt')
,SHA1('SamplePass_WithAddedSalt')
,SHA2('SamplePass_WithAddedSalt',224)
,SHA2('SamplePass_WithAddedSalt',256)
,SHA2('SamplePass_WithAddedSalt',384)
,SHA2('SamplePass_WithAddedSalt',512)
);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
105923 次 |
最近记录: |