学好加密算法,还怕私房钱没地儿藏?

本文介绍了数据安全中的关键概念,包括数字摘要(如MD5、SHA)、对称加密(如DES、IDEA)与非对称加密(如RSA、DSA),以及它们在保护数据完整性和防止信息篡改中的作用。还探讨了数字签名和数字证书在确保通信安全中的重要性。
摘要由CSDN通过智能技术生成

人世仙家本自殊,何须相见向中途。惊鸿瞥过游龙去,漫恼陈王一事无。
嗨,大家好,我是洛神,性别男。一个来自快乐星球的程序员。
欢迎大家专注我的公众号【程序员洛神】,我会不定期发放福利哟~

前言

数据安全问题是每个企业都非常注重的,小到系统每个接口,大到公司安全架构。那么,如何做好数据安全工作呢?当然就绕不开数据加密算法这一层了。下面我将会分别讲解数字摘要、对称加密、非对称加密、数字签名、数字证书这几个概念。
来吧,跟着洛神的思路,正式开始今天的小葵花妈妈课堂。
在这里插入图片描述

正文

一、数字摘要
数字摘要也称为信息摘要,它采用单向的Hash函数将需要计算的内容中的“摘要”成固定长度的串。接收者拿到这个消息后,会使用相同的hash算法进行计算,新产生的摘要和原摘要进行比对,如果消息在传送过程中被篡改过,那么通过比对就可以发现了。
常见的数字摘要算法有MD5、SHA、MAC等。

  1. MD5(Message Digest Algorithm 第五代信息摘要算法):

听到这个名字有没有感觉到自己的DNA在动了! 这个算法是目前业界应用最广泛的算法之一了,它也是一代一代改进过来的(它的父辈MD4、MD3、MD2)。目前各种主流编程语言都已经支持了,具体的实现可以去网上copy,也可以用hutool等来便捷调用。

常见的用处就是账号密码的加密,用户注册后将密码MD5加密后存到数据库,下次登陆的时候,将用户输入的密码再次使用MD5加密,并跟数据库存储的比对,相同代表密码正确。

MD5本身是不可逆的,但是自从出现了彩虹表(将比较常用的密码加密后做成字典,用程序暴力破解你的密码,当然,如果密码够复杂的话,破解的几率还是很低的),MD5就变得没有那么安全了,可以通过内部获取数据进行破解反查。所以,MD5加盐算法就出现了。
顾名思义,就是在你原本的密码上加点盐(salt),然后进行MD5加密,注意,盐必须是要随机生成的,账号密码保存到数据库的时候,将盐作为一个字段单独保存到数据库中,这样就算从内部拿到了数据,暴力破解也是很困难的。

MD5('这是密码' + '这是随机生成的盐') = '6c22ef52be70e11b6f3bcf0f672c96ce'
  1. SHA(Secure Hash Algorithm 安全散列算法):

按照NIST(美国国家标准和技术协会)的定义,修订后的SHA的算法统称为SHA-1,它是基于MD4算法,是目前最安全的散列算法之一,它散列计算后的摘要长度为160位(MD5算法是128位),由于它的长度比MD5长,所以计算难度更大,因此在同样的硬件下,它的效率是更低的,但是同样安全性是更高的。

二、对称加密
对称加密和下面要讲的非对称加密一般是作为基友成双成对的,对比记忆理解更容易些。
对称加密就是加密和解密用的同一个密钥,这个秘钥作为唯一的私钥。也就是说发送方和接收方用的都是实现商议好的同一把密钥。
非对称加密就是加密和解密不是同一个密钥,分为一把公钥,一把私钥。公钥加密信息,只能用私钥解密。私钥加密信息,只能用公钥解密。
好,下面说回对称加密。
对称加密比较常见的算法有DES、IDEA。
优点是加密速度快,效率高,而且算法是公开的。
缺点也很明显,假设咱俩商定好了私钥进行通信,但是由于我被一位肤白貌美前凸后翘的小姐姐引(se)诱,将私钥泄露了出去,那么意味着你的加密信息也不安全了。这是其一。
其二,每个用户使用的私钥都是不同的,那么就意味着发送方和接收方需要管理的钥匙数量是很大的,这造成的负担也是比较重的。
·在这里插入图片描述

三、非对称加密

非对称加密常见的算法有RSA和DSA

除了上面讲到的基本概念,洛神再大概介绍下使用非对称加密算法进行通信的基本过程:(人物 A B C)

A生成了一对密钥,将其中的一把钥匙作为公钥送给B和C,B拿到公钥后老老实实的用它把自己要发送的数据加密了,然后发送给了A,A拿到数据后,用自己藏起来的私钥进行解密,就看到了B发给A的私密小文章。而C呢,因为通宵看洛神的文章看到精神恍惚(没办法,写的太好了,害~),不小心拿错了钥匙,用其他人给他的公钥进行了加密,发给了A,A拿到数据后,用私钥解密,发现解密失败。
在这里插入图片描述

优点是相对于对称加密算法来说,更安全。
缺点就是速度慢,在某些极端情况下,它的效率可能要比对称加密算法低几十倍。而且无法保证绝对的安全。

其实在实际应用中,我们一般都是采用对称加密+非对称加密混合使用 来尽量保证安全的。下面我们还是用人物A和B来举例:
1.A生成了一对密钥。将公钥公开给B,私钥自己藏起来。
2.B自己生成一个对称加密的密钥,然后用这个密钥把要发送的内容加密。
3.B再用A告诉他的公钥把自己的密钥加密一下,最后把加密后的内容和自己的密钥发送给A
4.A通过自己的私钥解密出B生成的密钥,然后用这个密钥解密内容。
上面这个过程可以想象成:B把内容锁进自己的保险箱,然后又把这个保险箱的钥匙放到了A给他的保险箱里,这个保险箱的钥匙在A那里。只有A能打开取出钥匙,然后打开B的保险箱,拿到里面的内容。
这么麻烦为的什么?没错!双重安全。https传输的过程安全就是用上面这个流程来保证的,A就是服务端,B就是客户端。
在这里插入图片描述

但是你以为这样就绝对安全啦?太天真了! 来,给你说个场景,自己脑补下(老朋友 人物A和B 还有一个坏蛋W)

A和B要做数据通讯,A把自己生成的公钥发给B,但是,中途被坏蛋W拦截下来了,然后,坏蛋W把自己的公钥发给了B,B不知道啊,拿着坏蛋W的公钥加密了文件,发给A,此时坏蛋W早就守株待兔了,成功截取到了B发送的密文,用自己的私钥解密后肆意偷窥,偷窥完了以后,又用A的公钥把这个消息重新加密了,发送给了A,A拿到也能解密,看似没有问题,其实A和B的一举一动都已经被坏蛋W看得一清二楚了~~~吓不吓银?
在这里插入图片描述

其实出现这种问题的根本原因就是,无法保证发送过程中是否被人恶意篡改或者恶意冒充,那么肿么办呢,数字签名来帮你。

四、数字签名

数字签名其实是基于非对称加密算法,它的出现是为了保证数据中途不会被恶意篡改。
数字签名的过程:(A是发送者 B是接收者)
1.A使用Hash函数对发送数据进行计算,生成信息摘要。
2.A用非对称加密算法使用私钥对摘要进行加密。
3.将加密后的信息摘要和原发送数据一起发给B。
4.B使用同样的Hash函数从接收到的原始数据中计算出摘要,然后用A的公钥对发送过来的摘要进行解密和比对,如果摘要相同,则确认数据是由A发过来的。
在这里插入图片描述

这里大家要知道的一点是,数字签名本身并不保证数据安全性,肯定是需要加密算法对数据进行加密的(可以用B的公钥将所有的数据进行加密,然后B拿到后用自己的私钥解密即可)。

在上面非对称加密中提到的公钥被冒充的问题,其实是很可怕的,因为如果公钥被冒充了,那么数字签名的意义也就不存在了,因为B拿到的根本就不是A的东西。那么,如何解决这个问题呢?

dang~dang~dang~~~ 数字证书!

五、数字证书

为了证明B拿到的公钥确实是A的,就需要有一个权威机构来认证,这就是CA(认证机构)。CA的作用就是-----“介个公钥确实是A的啦,你可以放心用的啦”。

数字证书一般包含三部分内容:公钥、公钥的数字签名、公钥拥有者的信息。

那么,A怎么样才能拿到这个证书呢?

1.A先把公钥发给认证机构。
2.认证机构对公钥进行Hash运算,然后用自己的私钥对hash结果进行加密,生成A的公钥数字签名。
3.认证机构把A的公钥,生成的数字签名,还有附加的一些服务器信息整合到一起,做成一本证书,发给A。
从此以后,A就是一个有证儿的人了。

呕吼,那A怎么利用证书让B相信他的公钥的真实性?

1.A把证书、公钥发给B。
2.B通过认证机构拿到证书的公钥(就是认证机构在对A的公钥的hash值进行加密时使用的那一对钥匙)。
3.B用公钥对证书里的数字签名进行解密,拿到里面的Hash值。
4.B对A发过来的公钥进行Hash计算,使用计算结果和刚才解密出来的Hash值进行对比,如果一致,就代表A发过来的公钥是可信的。

总结

加密技术目前已经是相当成熟的了,具体需要如何应用,还是要看具体需求。像密码加密使用的MD5,前后端传参使用的token校验,还有各种安全框架,底层都是基于各种加密技术的,感兴趣的小伙伴可以多去深入了解。

结尾

关于加密算法的内容,大概就扫盲到这里了,毕竟洛神也不是专攻数据安全方面的,也不敢太深入的讲解,怕误人子弟~~~最近无意中看了许多面经的文章,里面不乏有许多大厂的面试题,大体翻了一下,有些问题的角度问的很有意思,所以下一期打算专门讲一下大厂各类连环炮问题,继续肝ing…
话说五月份的郑州是真的热啊!难道一直都这样吗?想回海边的一天。哭哭
在这里插入图片描述
人世仙家本自殊,何须相见向中途。惊鸿瞥过游龙去,漫恼陈王一事无。我是洛神,我们下期见。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值