MD 5/ SHA1 等Hash算法的正确是用问题.

ShiningstarHu 2005-06-09 12:28:27
开这个帖子的目的,是希望大家能够对使用Hash算法有一个正确的认识.并且回复一个叫作 Hozaka朋友给我留言的问题,以及他对MD5算法的一些认识. 也可以说是对我之前一个帖子后续.
原贴地址:
http://community.csdn.net/Expert/topic/4069/4069250.xml?temp=.9598657

首先感谢Hozaka以及其他朋友对我的原帖的支持.

我在这里再重申一边,Hash的算法不管是SHA1还是MD5,是用来保证数据完整性的
而不是用来保证数据机密性的.Hozaka在给我的留言中提到的一个例子,用一个key对数据加密,然后用这个key对数据解密.(这个是他人为的加密和解密)

这个例子里面说到的话题属于对称密钥加密算法的范畴.对称加密有对称加密的弱点,就是Key一旦泄密,则被这个Key加密的信息的机密性也就从此打破了,因此这里涉及到Key Management的话题.(这个话题也太大了,这里不做进一步解释了)

要实现数据机密性的需求实际上和Hash算法没有非常直接的关系. Hash算法,不管是MD5还是SHA1并没有什么真正意义上的key,算法都是公开的,这些算法的特点是不允许逆运算.其产生的效果好比在传统现实中我们对一份合同书进行签名,签名之后这份合同书就不允许修改了,那么使用了电子化以后我们怎么保证这一点呢? 因此发明了Hash算法来保证这一点. 举个例子来讲:

比如你用Word 写了一份合同书Email给对方,然后用Hash算法对这个整份的合同书进行编码. 编码结果是你得到一个固定长度的字符串,而且这个字符串代表了原始这封合同书上的每一个字符. 这个就是电子化意义上的数字签名. 有了这个东西,不关这份合同书在哪里,我只要有前面通过Hash算法生成的摘要信息,我就可以在任何时候判断出这份合同书是否被修改过. 这就是Hash算法的设计初衷. 由此我们可以看出, Hash算法没有任何机密性可言. 他仅仅是用于保证原始数据一旦生成就不允许修改. 这里体现数据完整性.

因此,在CSDN上的很多人用Hash算法,比如MD5 来保证数据的机密性,比如用于对数据库中保存的密码数据进行加密,其做法是不恰当的.希望大家看了这些以后能够对Hash算法有一个新的认识,并且能够正确的使用Hash算法.

如果大家有问题欢迎给我发送留言.我也很乐意回复.
...全文
219 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
HLis 2005-06-12
  • 打赏
  • 举报
回复
“……因此,在CSDN上的很多人用Hash算法,比如MD5 来保证数据的机密性,比如用于对数据库中保存的密码数据进行加密,其做法是不恰当的.……”

这有什么不恰当的?(无奈地摇摇头)

对数据库里面的口令(Password 我更喜欢翻译成口令)做 Hash 加密我认为是必要的。这样哪天你的数据库被人读了也不至于让他(她)知道所有人的密码啊。这种做法(对数据库中的口令做 Hash 加密)太普遍了,而且也是很有效的。

对文件提取摘要的过程其实也可以理解为(只是理解为)一种加密过程:就是让对方无法知道,你改成什么样子才能和现在保持一个 Hash 结果。
pyusksk503 2005-06-12
  • 打赏
  • 举报
回复
学习!
  • 打赏
  • 举报
回复
mark
patchclass 2005-06-11
  • 打赏
  • 举报
回复
顶一下,呵呵
Hozaka 2005-06-11
  • 打赏
  • 举报
回复
呵呵,帮顶
ShiningstarHu 2005-06-09
  • 打赏
  • 举报
回复
需要自己顶一下了 :P

28,390

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧