关于加密,解密,摘要,编码的理解和应用

故事的开始

那是一个夏天,在杭州,和两位好友吃完饭聊着。他们都是刚刚入行的程序员,讨论着密码在系统中存储的方式MD5.当时的我还是个门外汉,听着他们的讨论,非常有兴趣。那时候我认为MD5是加密放方式(当然现在看来不是)。那时候我认为处理密码的方式是,用户注册后,密码通过MD5加盐方式存入数据库。登录的时候,拿出密码,解密后比较(现在看来是错的)。

时隔多年我记录一下自己通俗易懂的理解(看到最后其实这些算法都涉及高等数学。。。)

1.那先从MD5开始吧。摘要算法主要包括MD5、SHA(安全散列算法)、SHA-1、SHA-256、SHA-384、SHA-512等。现在还有一个主流的 Bcrypt 摘要。摘要总结说:原文本通过算法得到新文本,无法通过新文本得到原文本,特点是不一样的原文本得到的新文本大概率是不一样的(注意是大概率,小概率会一样哦)。如果使用MD5加盐这种古老的方式,也可以替换为 Bcrypt 安全性更高。

2.接下来说说加密解密吧。加解密总结说:原文本通过算法得到新文本,又能通过算法得到原文本的过程。加解密可以分为两大类:对称算法(常见的AES)和非对称算法(RSA)。加密的时候需要一个秘钥,如果解密的时候用的一样的秘钥,那就是对称算法,如果用的不一样的秘钥,那就是非对称算法。(一般加密和摘要是配合使用的,这个和性能安全级别有关系)。非对称算法安全级别高于对称算法,但是性能上差。

3.编码base64,这个可是一个好东西,任何文件都可以转为base64编码方式,常见的是图片。它的编码和解码不需要秘钥,也就不属于加密的范畴。

实际应用

1.需要提供接口给第三方的时候,那么我们总不能直接给接口不做任何校验吧,这样谁都能访问,这也太不靠谱了吧。

这时候,如果第三方不多,例如只有两个,那那那直接给开白名单是一种比较省事的方式,要什么验证。让对方提供服务器ip,我们本服务器只允许你提供的服务器进行访问。好好好,那如果公司发展不错,第三方每天多10个,那运维忙死了,天天要开白名单,还不好维护和确定到底是那个第三方。还是搞验签吧。

(方案1)先来个懒人法,明文数据加盐之后 进行 MD5 得到的新文本是签名,把明文数据和签名都发送到服务器,服务器做一样的事情 先把原文本加盐 进行 MD5 如果得到的新文本和发送过来的签名一致,认为数据有效。(这里的关键是,这个盐,是服务方和第三方商量一致的,只要盐不泄露,则是安全的)。做到这里已经防住了大部分非技术人员和少量技术人员。

那么问题来了,有个前端老兄会使用浏览器的调试功能,能看到明文数据,这个明文数据还是比较铭感的,那在(方案1)中 多加一步,先把明文加密(非对称和对称随便选),对密文加盐 摘要(MD5也可以是Bcrypt)然后发送,服务端对应先验签,就是把密文先摘要 比较是否一致,如果一致才解密处理,否则视为无效数据。(到这里差不多了,大部分企业安全级别没有这么高,数据库存明文密码的大有人在)。

剩下的就是考虑安全级别,一般对称加密和验签足够了,不行就非对称呗。还有防止爆破,还需要加时间戳一起加密验签,超过时间戳一定偏移量也视为无效。行了行了够用了。

如果哪里不对,欢迎指正,谢谢,有帮助点个赞呗

posted @ 2024-06-13 11:46  不一样的爪哇  阅读(17)  评论(0编辑  收藏  举报