关于MessageDigest加密的疑惑?
今天刚刚研究MessageDigest。在网上看到了一些关于它的文章。有些疑惑。
MessageDigest 类为应用程序提供信息摘要算法的功能,如 MD5 或 SHA 算法。信息摘要是安全的单向哈希函数,它接收任意大小的数据,输出固定长度的哈希值。
主要应用在于单向加密。
在网上看到的文章好几个是这样介绍的。
比如在做用户登录的时候,有时我们必须把用户密码存放到数据库,为了安全起见,我们需要对这些密码进行单向的加密处理.步骤如下:
1.利用MessageDigest把用户密码加密,将加密结果存储到数据库。
2.当用户登录的时候,将用户输入的密码同样用MessageDigest把密码加密。
3.将加密的结果与数据库中的比较。采用MessageDigest.isEqual()方法。
4.得出结果。
这样做的意义在哪里呢?安全性体现在哪里呢?
如果说,不加密直接比较,这样传输数据容易被截取到直接的密码的话。那么这样加密之后传输,依然是等价判断,这跟不加密有什么区别呢?如果被截取数据的话,虽然截取到的是加密后的数据,可是依然能够用加密后的数据作为密码提交啊。
就是这个地方,我还是没有理解透安全性到底是在哪里体现的。刚刚研究。请高手指点。
------解决方案--------------------一般来说,当你访问服务器端的时候,服务器端要求验证,他会随机产生一个字符串,返回到客户端,然后用该随机数+上密码通过MD5或其他加密后连同该用户的用户名密码发送给服务器端,服务器端再用MD5对该用户在数据库中的用户名密码 用md5加密 ,得到的结果和用户传过来的加密串比较,看是否通过认证。
主要用于防止你的密码被截取。
------解决方案--------------------如果认识过程是发生在分布式系统当中,那么你所说的取摘要方法本身当然是不够的。
这种技术,其本身只能防止用户的明文密码不被获取,但单凭它自己,根本无法防止中间人攻击,因此必然其跟其它的技术、手段结合起来,设计一整套安全的登陆协议,才能有效。
------解决方案--------------------MD5,SHA摘要保存密码只是为了能访问数据库的管理员无法得到用户真实密码所用,比如银行的账号密码,除了本人,应当任何人都不能知道的。而防网络监听一般都是采用SSL协议,通过通讯时加密信息来使得别人监听的信息没有作用。当然所有的做法都不能特定木马盗取账号.
------解决方案--------------------怎么我印象中MessageDigest不是用来加密密码的?
不过你所说的可以这么来理解
我人一般认为只要与外界联系的都是不安全的,因为现在的网络很容易就被窃听
而假如你的密码不加密就发送出去的话,有人嗅探到了就可以直接拿来用了
但是假如你加密之后再发送出去,这样他得到的最多只是密文,而且都是些不敏感的字符
还需要花上一段时间破解密码,这样安全性就相对高多了
然而这样做,最后的目的都是可以达到的:验证用户身份
两段相同的原文用相同的方式加密得到的应该是相同的密文
但是不能保证一样的密文就是一样的原文,可能是会有冲突的
但是用户一般并不知道这些冲突在哪里,所以可以忽略掉
这样比较出来一样可以验证用户(很大的几率上)是否是原来的密码登录的
这种方式同时也可以防止网站的管理者不小心偷看到密码:)