Gio*_*lia 2 mysql md5 cryptography sha256 unique-key
在我的MySQL DB中,有一个定义如下的表:
CREATE TABLE `mytablex_cs` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`tag` varchar(6) COLLATE utf8_bin NOT NULL DEFAULT '',
`value` text COLLATE utf8_bin NOT NULL,
PRIMARY KEY (`id`),
KEY `kt` (`tag`),
KEY `kv` (`value`(200))
) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COLLATE=utf8_bin
Run Code Online (Sandbox Code Playgroud)
我需要在value字段上实现UNIQUE约束(键)。
我知道尚无法在blobor或text字段的整个值上定义唯一索引,但是建议使用一个工单(?)来实现此功能(请参阅本页),建议使用以下方法创建唯一键:像已经为其他字段实现的哈希。
现在,我想使用一种类似的方法向表中添加另一个包含哈希的字段,并在该字段上创建唯一键。
我介绍了创建此哈希的可能方法,并且由于我想避免冲突(我需要插入几百万个条目),因此即使快速搜索给出,RIPEMD-160算法似乎也是最好的算法我有几种使用SHA256甚至SHA1和MD5的类似解决方案。
我完全缺乏密码学知识,那么选择这种方法的缺点是什么?
我有另一个问题:MySQL当前使用哪种算法创建哈希?
让我们看看您的要求:
您需要确保值字段是唯一的。value字段是一个文本列,由于其性质,目前无法在value字段上创建唯一索引。因此,在此处,使用额外的字段作为字段值的哈希是您唯一的选择。
这种方法的优点:
这种方法的缺点:
我假设您了解哈希函数的作用以及概念上的工作原理。
您可以在此处找到加密功能列表:http : //dev.mysql.com/doc/refman/5.5/en//encryption-functions.html
据我所知,MySQL支持MD5,SHA,SHA1和SHA2哈希函数。如果不是全部,那么大多数(即使不是全部)对于散列也应该足够。诸如MD5之类的某些功能在密码学应用程序中使用时(即在PKI中将其用作签名算法等时)存在一些问题。但是,当您决定使用它来创建唯一值时,这些问题并不那么重要,因为它实际上并没有被应用在这里的加密上下文中。
要使用MySQL哈希函数,您可以尝试以下示例:
SELECT MD5('1234')
SELECT SHA('1234')
SELECT SHA1('1234')
SELECT SHA2('1234',224);
Run Code Online (Sandbox Code Playgroud)
与newthig一样,您应该尝试所有方法并找到最适合您的方法。