md5
开始
有时由于存储优化或实现业务要求,或数据引用、去重要求。需要对业务数据计算和存储指纹信息。
以下分析几方面。
1.指纹算法选择
2.指纹输入的数据选择
3.指纹储存方法
指纹算法选择
理论hash冲突的可能性:
md5 > sha1 > shaXX
这里没什么心得。不过md5已经有彩虹表之类的冲突列表了。无意的冲突很难,但如果是有意的冲突和搞事,MD5就比较不安全。
业务数据指纹的指纹输入选择
选择MD5的输入公式,建议使用可以直接在sql中计算的公式,方便后台维护时在线查对和做数。可以考虑:
注意多字段合并计算md5时,需要加入分隔符(想想不加为什么不可以?),和考虑是否需要对分隔符冲突作转义(escape)处理。
使用时,需要注意DB和表的charset
select
concat_ws('~',
replace(field1,'~','~~'),
replace(field2,'~','~~')
);
Mysql中用好Binary类型做性能优化:
需要在mysql表中保存MD5值。考虑三个方案:
varchar(32)
char(32)
binary(16)
由于MD5值,实际为1