初步了解密码加密(二) | 青训营笔记

125 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第14天

上次写过了密码加密中的加密传输, 现在通过数字证书等方式保证传输过程的可靠性

详见<<初步了解密码加密(一) | 青训营笔记>>

这次来讲加密存储

加密存储

在做本科毕设时, 写过一个论坛项目, 当时对密码加密没有概念, 使用的就是本地明文存储, 后来有次实习面试, 被面试官问"你这个论坛项目密码是怎么加密的呢?", 然后就原形毕露, 暴露了自己的无知, 这次青训营大项目, 正好补足了这方面的不足.

Hash加密

Hash加密算法属于一种单向加密算法, 比较常见的Hash加密算法有MD5和SHA系列

单向加密主要是由于hash的不唯一性, 导致很难从hash结果去复原文本

MD5

MD5全称为Message Digest Algorithm 5, 即消息摘要算法5

MD5将输入的不定长度文本信息, 经过一定的hash算法, 输出一个128位的散列值, 通常可以表示位32位的16进制数字

当文本信息发生一些微小的变动时, hash结果便会发生很大变化

image-20230223150151906

图片来源于wiki

MD5算法主要的用途是用来保证消息一致性, 而非对消息进行加密, 因为MD5本质上还是一种hash算法, 既然是hash算法, 就会发生hash碰撞, 只不过发生hash碰撞的概率非常低, 但是信息安全实验室2009年发布了一篇文章, 表明需要2^{20.96}的碰撞算法复杂度, 即可破解MD5的碰撞抵抗

去年和同学参加数学建模大赛, 赛方要求提前将文章用MD5工具进行加密, 过几天再上传文章, 这里主要就是用MD5来保证信息一致性, 虽然存在本破解的可能, 不过概率非常小, 所以可以经常用来确保信息一致性

如果仅仅使用MD5这种Hash算法进行密码加密, 就算黑客并没有猜中用户密码, 但是通过猜测其他文本, 得出和密码一致的hash结果, 就算是猜中了一个用户密码, 所以使用这种算法来进行密码加密, 并不安全

SHA

讲完了MD5, 再来看SHA就比较容易

SHA算法主要包括SHA-1, SHA-2系列和SHA-3, 其中SHA-1是MD5的后继者, 并且已经于2017年被破解, 详见shattered

SHA-2主要包括SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256等, 目前还没有破解, 但是他的思想和SHA-1类似, 所以迟早有被破解的一天

SHA-3是2015年发布的最新的hash加密算法, 还没有被破解的苗头

加盐

指在散列之前将散列内容(例如:密码)的任意固定位置插入特定的字符串。这个在散列中加入字符串的方式称为“加盐”。其作用是让加盐后的散列结果和没有加盐的结果不相同,在不同的应用情景中,这个处理可以增加额外的安全性。

在大部分情况,盐是不需要保密的。盐可以是随机产生的字符串,其插入的位置可以也是随意而定。如果这个散列结果在将来需要进行验证(例如:验证用户输入的密码),则需要将已使用的盐记录下来。