
课程咨询: 400-996-5531
投诉建议: 400-111-8989
认真做教育 专心促就业
算法的学习和应用是许多软件编程开发程序员都需要熟练掌握的一个编程知识点,而本文我们就通过案例分析来简单了解一下,Java编程加密算法应用分析。
1.彩虹表
MD5之所以说它是不安全的,是因为每一个原始密码都会生成一个对应的固定密码,也就是说一个字符串生成的MD5值是永远不变的。这样的话,虽然它是不可逆的,但可以被穷举,而穷举的“产品”就叫做彩虹表。
什么是彩虹表?
彩虹表是一个用于加密散列函数逆运算的预先计算好的表,为破解密码的散列值(或称哈希值、微缩图、摘要、指纹、哈希密文)而准备。一般主流的彩虹表都在100G以上。这样的表常常用于恢复由有限集字符组成的固定长度的纯文本密码。这是空间/时间替换的实践,比每一次尝试都计算哈希的暴力破解处理时间少而储存空间多,但却比简单的对每条输入散列翻查表的破解方式储存空间少而处理时间多。
大家想想,如果有了这张表之后,那么我就可以通过MD5的密文直接查到原始密码了,所以说数据库如果只使用MD5加密,这就好比用了一把插了钥匙的锁一样不安全。
2.解决方案
想要解决以上问题,我们需要引入“加盐”机制。
盐(Salt):在密码学中,是指通过在密码任意固定位置插入特定的字符串,让散列后的结果和使用原始密码的散列结果不相符,这种过程称之为“加盐”。
说的通俗一点“加盐”就像炒菜一样,放不同的盐,炒出菜的味道就是不同的,咱们之前使用MD5不安全的原因是,每个原始密码所对应的MD5值都是固定的,那我们只需要让密码每次通过加盐之后,生成的终密码都不同,这样就能解决加密不安全的问题了。
3.实现代码
加盐是一种手段、是一种解决密码安全问题的思路,而它的实现手段有很多种,我们可以使用框架如SpringSecurity提供的BCrypt进行加盐和验证,当然,我们也可以自己实现加盐的功能。
本文为了让大家更好的理解加盐的机制,所以我们自己来动手来实现一下加盐的功能。
实现加盐机制的关键是在加密的过程中,生成一个随机的盐值,而且随机盐值尽量不要重复,这时,我们就可以使用Java语言提供的UUID(UniversallyUniqueIdentifier,通用识别码)来作为盐值,这样每次都会生成一个不同的随机盐值,且永不重复。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。