非对称加密RSA与对称加密AES项目应用

到此 灵熙云工作室 - 实践出真理 查看全文内容

在这里插入图片描述

在项目中,为了保证数据的安全,我们常常会对传递的数据进行加密。常用的加密算法有对称加密(AES)和非对称加密(RSA)。

AES

AES加密算法

对称加密就是指,加密和解密使用同一个密钥的加密方式;加密计算量小、速度块,适合对大量数据进行加密的场景。AES取代DES成为加密标准(微信小程序加密传输就是用这个加密算法的)

AES加密的五个关键词

  • 分组密码体制

AES采用分组密码体制,即AES加密会首先把明文切成一段一段的,而且每段数据的长度要求必须是128位16个字节,如果最后一段不够16个字节了,就需要用Padding来把这段数据填满16个字节,然后分别对每段数据进行加密,最后再把每段加密数据拼起来形成最终的密文。

  • Padding

Padding就是用来把不满16个字节的分组数据填满16个字节用的,它有三种模式PKCS5、PKCS7和NOPADDING。解密端需要使用和加密端同样的Padding模式,才能准确的识别有效数据和填充数据。开发通常采用PKCS7 Padding模式。

  • 初始向量IV

初始向量IV的作用是使加密更加安全可靠,我们使用AES加密时需要主动提供初始向量,而且只需要提供一个初始向量就够了,后面每段数据的加密向量都是前面一段的密文。初始向量IV的长度规定为128位16个字节,初始向量的来源为随机生成。

  • 密钥

开发通常采用128位16个字节的密钥,我们使用AES加密时需要主动提供密钥,而且只需要提供一个密钥就够了,每段数据加密使用的都是这一个密钥,密钥来源为随机生成。

  • 四种加密模式

AES一共有四种加密模式,分别是ECB(电子密码本模式)、CBC(密码分组链接模式)、CFB、OFB,一般使用的是ECB、CBC模式

注意事项

  1. 服务端和我们客户端必须使用一样的密钥和初始向量IV。
  2. 服务端和我们客户端必须使用一样的加密模式。
  3. 服务端和我们客户端必须使用一样的Padding模式。
    以上三条有一个不满足,双方就无法完成互相加解密。

RSA

RSA加密算法

RSA加密是一种非对称加密。可以在不直接传递密钥的情况下,完成解密。这能够确保信息的安全性,避免了直接传递密钥所造成的被破解的风险。
RSA是由一对密钥来进行加解密的过程,分别称为公钥和私钥。两者之间有数学相关,该加密算法的原理就是对一极大整数做因数分解的困难性来保证安全性。通常个人保存私钥,公钥是公开的(可能同时多人持有)。

RSA签名

加密和签名都是为了安全性考虑,但略有不同。常有人问加密和签名是用私钥还是公钥?其实都是对加密和签名的作用有所混淆。简单的说,加密是为了防止信息被泄露,而签名是为了防止信息被篡改。这里举2个例子说明。

第一个场景

B(客户端)要给A(服务器)传递一条重要消息。

RSA的加密过程如下:

  1. A生成一对密钥(公钥和私钥),私钥不公开,A自己保留。公钥为公开的,任何人可以获取。
  1. A传递自己的公钥给B,B用A的公钥对消息进行加密。
  2. A接收到B加密的消息,利用A自己的私钥对消息进行解密。

在整个过程中,只有2次传递过程,第一次是A传递公钥给B,第二次是B用公钥加密消息传递给A,即使都被敌方截获,也没有危险性,因为只有A的私钥才能对消息进行解密,防止了消息内容的泄露。

第二个场景

A(服务器)收到B(客户端)发的消息后,需要进行回复“收到”

RSA签名的过程如下:

  1. A生成一对密钥(公钥和私钥),私钥不公开,A自己保留。公钥为公开的,任何人可以获取。
  1. A用自己的私钥对消息加签,形成签名,并将加签的消息和消息(加密后的信息)本身一起传递给B。
  2. B收到消息后,在获取A的公钥进行验签,如果验签出来的内容与消息本身一致,证明消息是A回复的。

在整个过程中,只有2次传递过程,第一次是A传递加签的消息和消息(加密后的信息)本身给B,第二次是B获取A的公钥,即使都被敌方截获,也没有危险性,因为只有A的私钥才能对消息进行签名;即使知道了消息内容(加密后的信息),也无法伪造带签名的回复给B,防止了消息内容的篡改。

存在的缺陷

综合两个场景你会发现:

  1. 第一个场景虽然被截获的消息没有泄露,但是黑客可以利用截获的公钥,将假信息进行加密,然后传递给A。
  1. 第二个场景虽然截获的消息不能被篡改,但是消息的内容可以利用公钥解密来获得,并不能防止泄露。

所以在实际应用中,要根据情况灵活使用,可以同时使用加密和签名,也可以A和B都有一套自己的公钥和私钥(这里的A、B指服务端,前端的话不安全),当A要给B发送消息时,先用B的公钥对消息加密,再对加密的消息使用A的私钥来加签名,达到既不泄露也不被篡改,更能保证消息的安全性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

靈熙雲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值