1.用户密码加密算法

在最开始的时候,我打算用md5加盐来存放用户的密码;在查找资料的时候,发现了MD5算法不再适用于用户密码加密的言论,于是问起了GPT。

感觉这部分面试的时候可能会涉及,干脆记录下来吧!

1.1 什么是MD5?

MD5(Message Digest Algorithm 5)是一种常用的哈希算法,用于将任意长度的数据转换为固定长度(128位或16字节)的哈希值。

MD5 哈希值通常以十六进制字符串的形式表示。由于每个字节可以用两个十六进制字符表示,因此 MD5 哈希值的长度为 32 个字符(16字节 * 2)。

需要注意的是,尽管 MD5 哈希值固定为 128 位(16字节),但并不意味着输入数据的长度与哈希值长度相同。无论输入数据的长度是多少,MD5 哈希值始终是固定的 128 位长度。

1.2 MD5的缺陷?

MD5 算法存在安全漏洞主要是由于其设计和性质的限制。

首先,MD5 算法是一个单向哈希函数,即无法从哈希值逆推出原始输入数据。然而,研究人员发现,通过对不同的输入数据计算相同的 MD5 哈希值(也称为哈希碰撞),可以导致安全问题。这意味着攻击者可以通过寻找具有相同 MD5 哈希值的两个不同输入,来伪造数据或绕过验证机制。

其次,MD5 的输出长度较短,只有 128 位(16 字节)。这种较短的哈希值使得碰撞的可能性更高。随着计算能力的提升,通过穷举计算或使用专门的碰撞攻击算法,更容易找到两个不同的输入数据产生相同的 MD5 哈希值。

因此,基于这些安全漏洞,MD5 已被证实不再适用于诸如密码存储等关键安全场景。相反,应该选择更强大且抗碰撞性更好的哈希算法,例如 SHA-256 或 SHA-3 等算法,以提供更高级别的数据完整性和安全性保护。

1.3 SHA256的优势

SHA-256 相对于 MD5 具有以下几个主要的优势:

  1. 安全性:MD5 已经被证实存在安全漏洞,容易受到碰撞攻击和预映像攻击。相反,SHA-256 是一种更为安全的哈希算法,目前没有已知的有效攻击方法,能够从哈希值逆推出原始输入数据或找到碰撞。
  2. 哈希长度:MD5 的哈希长度为 128 位(16 字节),而 SHA-256 的哈希长度为 256 位(32 字节),明显更长。更长的哈希长度增加了哈希碰撞的难度,使得找到两个不同的输入产生相同的哈希值的概率大大降低。
  3. 抗碰撞性:SHA-256 提供了更强大的抗碰撞性,即输入数据的微小变化也会导致输出哈希值的较大变化。这意味着无法通过微小的修改来生成具有相同哈希值的不同输入数据。

综上所述,SHA-256 相对于 MD5 具有更高的安全性和抗碰撞性,因此在安全敏感的场景中,应该使用 SHA-256 或其他更强大的哈希算法来保护数据的完整性和安全性。

然而,对于非安全相关的简单校验和一些非关键应用,MD5 仍然是一个快速且有效的哈希算法选择。

2.前端错位

230810下午改了一整个下午的前端,一直用的火狐。图标和输入框的样式都是直接手撸的,耗时较长。

image-20230810211534557

原以为大功告成了。结果把url往edge一粘贴,完蛋了,图标直接全部错位

image-20230810211635908

后来咨询了前端大佬才知道,不同浏览器对相同代码的渲染处理可能有所不同。如果用前端框架bootstrap就能较好的解决这个问题。

而我的项目所使用的模板里面,也确实引入了bootstrap,但我不太会使用……