md5和BCrypt加密算法

文章用于个人学习记录

一、md5加密算法

MD5
MD5(Message Digest Algorithm 5)是一种广泛使用的散列函数,用于将任意长度的输入数据转换为固定长度的散列值,通常为128位(16字节)。
MD5算法的原理如下:
初始化状态: 初始时,MD5算法会初始化一个128位的状态,由四个32位的寄存器(A、B、C、D)组成。
填充数据: MD5算法会对输入数据进行填充,以确保输入数据的长度是512位的整数倍。填充数据的方式是在输入数据末尾添加一个1,然后添加一系列0,直到满足长度要求。
迭代压缩: 将每个512位的数据块分成16个32位的小块,并进行64轮的迭代操作。在每一轮中,使用一系列位操作、逻辑函数和常数来更新寄存器的值。
输出散列值: 在所有数据块迭代完成后,将寄存器中的最终值按照特定的顺序连接在一起,形成128位的散列值。
MD5的算法步骤比较复杂,但是它的设计目标是产生一个固定长度的散列值,使得对输入数据的微小变化都能够产生不同的散列值。然而,由于MD5算法的一些弱点,例如碰撞(两个不同的输入产生相同的散列值)的可能性,它现在被认为不再安全,不适合用于安全性要求较高的应用。

MD5优缺点
优点:计算速度快,加密速度快,不需要密钥;
可以检查文件的完整性,一旦文件被更改,MD5值会改变;
防止被篡改,传输中一旦被篡改,计算出的MD5值也会改变;
防止看到明文,公司存放密码存放的是MD5值。

缺点:作为散列算法,经过证实,仍然会存在两种不同数据会发生碰撞;MD5的安全性。

参考:md5加密详情参考

BCrypt
Bcrypt有四个变量:
Rounds工作因子: 正数,代表hash杂凑次数,数值越高越安全,默认10次。它指定了进行多轮加密的轮数或工作因子。在 BCrypt 中,工作因子的值会影响加密操作的复杂性和耗时。
myPassword: 明文密码字符串。
salt: 盐,一个128bits随机字符串,22字符,在多轮加密过程中都使用这个盐;
myHash: 经过明文密码password和盐salt进行hash,个人的理解是默认10次下 ,循环加盐hash10次,得到myHash。

以上四个参数中,前三个为输入参数,最后一个myhash为输出的参数。

mahash生成流程:
1.拿到明文字符串myPassword;
2.生成salt并与password进行拼接;
3.对拼接后的字符串进行多轮加密,加密算法使用blowfish算法;
4.生成新的myhash,与BCrypt版本号 + salt盐拼接并返回,存入数据库中。

这样同一个密码,每次登录都可以根据自省业务需要生成不同的myHash, myHash中包含了版本和salt,存入数据库。

如何验证密码是否正确?
由于BCrypt只能用于单向加密,所以需要先获取散列表中的盐和工作因子数值,再进行相同的多轮加密,若得到的myhash与数据库中相同,则表示密码正确。

安全如何保证?
它采用了salt和cost两种机制来增强密码的安全性。
salt: 为了防止彩虹表攻击,Bcrypt算法会生成一个随机salt值,将salt与密码拼接后再进行哈希运算。这个salt值是由22个可打印字符组成的字符串,它的作用是使得相同密码的哈希值在不同的salt值下产生不同的结果,从而增加密码破解的难度。
cost: Bcrypt算法会将明文密码和salt进行多次迭代的哈希运算。迭代的次数是由cost值决定的,cost值越大,运算次数越多,从而增加密码破解的难度。通常来说,建议将cost值设置为12,这样可以保证安全性和性能的平衡。

优缺点
优点
安全性高:由于Bcrypt采用了salt和cost两种机制,它可以有效地防止彩虹表攻击和暴力破解攻击,从而保证密码的安全性。
灵活性强:Bcrypt算法可以根据实际情况进行调整,可以设置不同的cost值和salt值,从而满足不同的安全需求。
易于使用:Bcrypt算法已经被广泛应用于各种编程语言和操作系统中,使用起来非常方便。
缺点
运算速度较慢:由于Bcrypt算法需要进行多次哈希运算,所以它的运算速度比其他密码哈希函数要慢一些,从而可能影响系统的性能。
不可逆:Bcrypt算法是一种单向哈希函数,不能够将哈希值转换回原始密码。这也就意味着,一旦密码被哈希后,就无法再次获取明文密码。

其余算法的缺陷
虽然MD5、SHA-1等哈希算法在某些场景下也可以用于密码加密,但他们有一个共同点就是相同输入生成的hash值是不变的, 这就给暴力破解或Rowbain表破解创造了机会。

而Bcrypt算法具有一个重要的特性,即每次生成的哈希值都不同。这是由于Bcrypt算法在计算哈希值时,会使用一个随机的“盐值”来加密密码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值