相关文章推荐
讲道义的楼房  ·  Linux Bash ...·  9 月前    · 
痴情的葫芦  ·  [.Net 5.0] ...·  1 年前    · 
   生活中,我们为了保证密码的安全性,一般都不会使用明文存储,而是要将明文进行加密,然后再进行存储。假如我们的数据被拖库,代码被泄露,请求被劫持的情况下,也能保证用户的密码不被泄露,确保账号的安全性。

MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计。
MD5这种不可逆的加密方法理论上很安全了,但是随着彩虹表的出现,使得大量长度不够长的密码可以直接从彩虹表里反推来。MD5算法无法防止碰撞(collision),也意味着它并不安全。

md5(md5(password) + salt)

为了改进MD5加密,机智的程序员就想,既然你可以反推出我的密码,那么只要我在我的短密码上加上一段很长的字符,再计算md5,这样你反推出原始密码就会变得非常困难。这段长字符就是我们所称的盐(Salt),通过这种方式加密的结果,我们称为加盐Hash

SHA512(SHA512(password)+salt)

在我们常用的哈希函数中,SHA-256、SHA-512会比md5更安全,更难以破解。通过上面的加盐哈希运算,即使攻击者拿到了最终结果,也很难反推出原始的密码。不能反推,但可以正着推,假设攻击者将 salt 值也拿到了,那么他可以枚举遍历所有 6 位数的简单密码,加盐哈希,计算出一个结果对照表,从而破解出简单的密码。这就是通常所说的暴力破解。

bcrypt(SHA512(password),salt,cost)

为了应对暴力破解,我们使用了加盐的慢哈希。慢哈希是指执行这个哈希函数非常慢,这样暴力破解需要枚举遍历所有可能结果时,就需要花上非常非常长的时间。既然无法阻止你暴力破解,那就控制你的时间。
通过调整 cost 参数,可以调整该函数慢到什么程度。假设让 bcrypt 计算一次需要 0.5 秒,遍历 6 位的简单密码,需要的时间为:((26 * 2 + 10)^6) / 2 秒,约 900 年。

在讲述密码加盐之前,我们先梳理一下,我们常见的密码及加密方式 明文密码    所谓明文密码就是没有对密码做任何加密措施,前台传到后台的是 “123456”,后台数据库中保存的就是”123456″,这种密码没有什么安全可言,数据库被拷走,那么用户的信息就被连锅端了。 简易密码加密    所谓简易密码加密,就是后台服务自己定义一些简单的加密方式,如:密码反着存、密码加前后缀、密码字符串中指定字符被替换等等。这种密码乍看有点加密的意思,但是你都被黑客大哥给攻破了,你的数据库,后台加密程序都被人家拿走了,那不还是相当给人家的明文嘛。所以也很不安全。  MD5 加密    我知道的第一个正经的加密方式就 密码认证,首先是密码加密算法,然后密码咋存储 ,如图所示 密码加密分为不可加密和可逆加密算法。安全存储策略,有明文保存和加盐保存,明文保持容易导致密码丢失,一般采用加盐密码保持。注册和认证流程如下: 用户注册一个帐号 密码经过哈希加密储存在数据库中。只要密码被写入磁盘,任何时候都不允许是明文 当用户登录的时候,从数据库取出已经加密的密码,和经过哈希的用户输入进行对比 如果哈希值相同,用户获得登入授权,否则,会被告知输入了无效的登录信息 每当有用户尝试登录,以上两步都会重复 加密过程采用sha25 项目需求:      在java web项目中使用apache shiro来进行安全保护,并使用shiro提供的加密方法来对密码进行加密。      在另外一个c#项目中,需要对接这个java web项目,并且验证的密码是shiro进行加密的。      这个时候就需要对C#端的加密方式稍作修改,才能达到java和c#的加密结果的一致性     注:如果shiro跟springmvc集成了 对于同一密码,同一加密算法会产生相同的hash值。这样,当用户进行身份验证时,对用户输入的明文密码应用相同的hash加密算法,得出一个hash值,然后使用该hash值和之前存储好的密文值进行对照,如果两个值相同,则密码认证成功,否则密码认证失败。 出于更安全的考虑,即使两个用户输入的是相同的密码,也应该要保存为不同的密文,即使用户输入的是弱密码,也需要考虑进行增强,从而增加密码被攻破的难度。因此出现了加盐加密。 在很久很久以前写过一篇文章讲linux中shadow文件的数据构成(https://blog.csdn.net/cracker_zhou/article/details/50817743)。当然在文章末尾提到了使用python的crypt模块可以生成或者校验linux密码的有效性。但是crypt模块在windows上并不能使用。同时在文章中提交密码的生成依赖于算法(md5,sha512之类)和盐值... 目录什么是盐,盐加密是什么为什么要使用盐加密 什么是盐,盐加密是什么 盐:密码学中是指通过在密码任意固定位置插入特定字符串,让散列后的结果和使用原始密码的散列结果不相符,这样一个过程我们称之为“加盐”。 盐值 是一组随机的字符串,系统随机生成;Salt可以插在最前面、最后面,也可以插在中间,可分开插入也可倒序。 第一代密码 => 数据库明文存储,一旦数据库泄露,用户数据全部泄漏 第二代密码 => 数据库加密存储,典型加密算法有 MD5 和 SHA1 ,数据库存储 编码与解码Shiro 提供了 base64 和 16 进制字符串编码、解码的 API 支持,方便一些编码解码操作。Shiro 内部的一些数据的存储 、表示都使用了 base64 和 16 进制字符串。1、base64 编码与解码String str = "admin"; String base64Encoded = Base64.encodeToString(str.getBytes()); St... 我的应用程序在Java中使用了盐腌哈希。 首先,生成随机盐。 然后,该盐前缀为输入密码SHA-512,组合的字符串再次为SHA-512,其实现方式如下:String password = testpwd.getText().toString();SecureRandom rand = new SecureRandom();byte[] randbytes = new byte[16];rand....   用于加密相关的操作,代替了md5模块和sha模块,主要提供SHA1,SHA224,SHA256,SHA384,SHA512,MD5算法。 在python3中已经废弃了md5和sha模块,简单说明下md5和sha的使用。   什么是摘要算法呢?   摘要算法又称为哈希算法,散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)用于加密相关的操作。 md5加密 hash = hashlib.md5() hash.update('admin'.e