首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于合并数据集的md5函数安全吗?

用于合并数据集的md5函数安全吗?
EN

Stack Overflow用户
提问于 2015-01-12 16:37:35
回答 2查看 1.5K关注 0票数 3

我们即将推广一段代码,它使用SAS md5()散列函数有效地跟踪大型数据集中的更改。

代码语言:javascript
复制
format md5 $hex32.;
md5=md5(cats(of _all_));

根据文档

MD5函数将基于MD5算法的字符串转换为128位哈希值.此哈希值称为消息摘要(数字签名),对于传递给函数的每个字符串几乎都是唯一的。

大约在什么阶段,“几乎唯一的”开始造成数据完整性风险(如果有的话)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-13 08:56:49

我看到了一个md5比较出错的例子。如果在第一行(两列)中有值"AB“和"CD”,而在第二行中有"ABC“和"D”,则它们得到相同的md5值。参见此示例:

代码语言:javascript
复制
data md5;
  attrib a b length=$3 informat=$3.;
  infile datalines;
  input a b;
  format md5 $hex32.;
  md5=md5(cats(of _all_));
datalines;
AB CD
A BCD
;run;

当然,这是因为(_all_的)猫将连接和剥离变量(使用“最佳”格式将数字转换为字符串),而没有分隔符。如果您使用CAT代替,这将不会发生,因为前导和尾随空白没有被删除。这个错误并不是很难理解。如果您丢失了值,那么这种情况可能会发生得更频繁。例如,如果在文本变量中有很多二进制值,其中一些是缺失的,那么这种情况可能会经常发生。

可以手动完成此操作,在值之间添加一个分隔符。当然,当你有这样的情况时,你仍然会有这种情况("AB!“)和“CD”和("AB“和"!CD")和你使用的"!”作为分隔符..。

票数 3
EN

Stack Overflow用户

发布于 2015-01-12 17:18:42

MD5有2^128个不同的值,从我在2^64个不同值(即10^20左右)所读到的数据来看,您发现碰撞的可能性很大。

但是,由于MD5是如何生成的,您可能会遇到来自非常相似的预图像的碰撞风险,这些图像的差异仅为两个字节。因此,很难说这对您的特定过程会有多大的风险。当然,只有两条消息发生碰撞是可能的。不太可能。节省一些计算时间对你的好处是否足以超过一个小的风险?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27906683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档