Cha*_*iga 9 mysql hash md5 sha1
我需要在表中的某些数据上生成一个哈希值
CREATE TABLE Table1
(
F1 INT UNSIGNED NOT NULL AUTO_INCREMENT,
F2 INT default NULL,
F3 Varchar(50) default NULL,
..
FN INT default NULL,
PRIMARY KEY (F1)
);
Run Code Online (Sandbox Code Playgroud)
即F1,F3,FN,其中F2 = 10
SELECT md5(CONCAT_WS('#',F1,F3,FN)) FROM Tabe1 WHERE F2=10
Run Code Online (Sandbox Code Playgroud)
为表中的每一行提供一个哈希值.
质询
1)如何在整个表上获得单个哈希?
2)使用MD5,SHA1,SHA或其他任何方法的fasts哈希算法是什么?
编辑:
MySQL 4.1中被使用了-它确实不具备触发支持
Nak*_*lda 10
1)
SELECT MD5( GROUP_CONCAT( CONCAT_WS('#',F1,F3,FN) SEPARATOR '##' ) ) FROM Table1
Run Code Online (Sandbox Code Playgroud)
2)速度并不重要,因为函数必须只运行一次,所有哈希函数都足够快
至于速度,你应该试试.这取决于功能的实现方式.
但是,您可能会发现速度差异非常小.你引用的散列函数都比普通磁盘可以喷出的快,所以问题不在于"什么散列函数会使代码运行最快?" 但"什么哈希函数会使CPU在等待来自磁盘的数据时最空闲?".
在我的Intel Core2 Q6600上,主频为2.4 GHz(64位模式),使用我自己的散列函数C实现,我得到以下散列速度:
那只是使用单核.我的硬盘最高可达100 MB/s,因此可以说即使使用SHA-256,散列过程也不会超过机器CPU功率的17%.当然,没有什么可以保证MySQL使用的实现是那么快,这就是你应该尝试的原因.此外,在32位模式下,SHA-512性能会下降很多.
在密码学方面,在MD5和SHA-1中发现了(严重)弱点,因此如果您在安全相关的设置中工作(即,即使有人可以选择某些更改并希望更改,您也希望检测到更改你没有检测到所说的变化),你应该坚持使用SHA-256或SHA-512,据我们所知,它足够强大.不过,MD5和SHA-1在非安全情况下仍然可以正常使用.
| 归档时间: |
|
| 查看次数: |
7563 次 |
| 最近记录: |