参考:https://blog.csdn.net/T0mato_/article/details/53160772

 

相关概念解释:

AES: 

设AES加密函数为E,则 C = E(K, P),其中P为明文,K为密钥,C为密文。也就是说,把明文P和密钥K作为加密函数的参数输入,则加密函数E会输出密文C。

AES为分组密码,分组密码也就是把明文分成一组一组的,每组长度相等,每次加密一组数据,直到加密完整个明文。在AES标准规范中,分组长度只能是128位,也就是说,每个分组为16个字节(每个字节8位)。密钥的长度可以使用128位、192位或256位。密钥的长度不同,推荐加密轮数也不同。

AES算法属于典型的对称算法。

AES算法具体步骤参考: https://blog.csdn.net/gulang03/article/details/81175854

CTR ( CounTeR 计数器模式):

计数模式(CTR模式)加密是对一系列输入数据块(称为计数)进行加密,产生一系列的输出块,输出块与明文异或得到密文。对于最后的数据块,可能是长u位的局部数据块,这u位就将用于异或操作,而剩下的b-u位将被丢弃(b表示块的长度)。CTR解密类似。这一系列的计数必须互不相同的。

IV:

Initialization Vector, 初始化向量,一般是加密过程初始化产生的随机向量。加密和解密过程需要同一组IV。

MAC:

密文的收发双发需要提前共享一个秘钥。密文发送者将密文的MAC值随密文一起发送,密文接收者通过共享秘钥计算收到密文的MAC值,这样就可以对收到的密文做完整性校验。当篡改者篡改密文后,没有共享秘钥,就无法计算出篡改后的密文的MAC值。

在AES_GCM算法中,MAC又称作TAG

GCM:

GCM ( Galois/Counter Mode) 指的是该对称加密采用Counter模式,并带有GMAC消息认证码。

 下图的解释:

Ek 使用秘钥k对输入做对称加密运算
XOR 异或运算
Mh 将输入与秘钥h在有限域GF(2^128)上做乘法

 

 

 

 

 

 

 

算法详细步骤:

AES_GCM 算法加密过程:

1. AES加密输入:

  •   IV值 (一般随机产生)
  •   密钥
  •   明文
  •        附加消息Aad: 附加消息不是明文内容, 作AES加密时作为输入,对产生MAC值产生影响.可有可无

2. 算法对明文进行分段,并通过输入的密钥分别与分段的明文作AES对称加密运算, 生成密文

3. 对上一步的每段加密结果, 以及附加消息进行Mh运算. 得到的结果生成MAC值作为验证信息, 再GCM算法中又叫做TAG值

 

AES_GCM 算法解密过程:

1. AES解密输入:

  •   IV值 (与加密过程所用的IV值相同)
  •   密钥
  •   密文
  •        附加消息Aad: 与加密过程所用的IAad值相同
  •   加密产生的TAG

2. 分别用密钥, 对每段密文进行解密

3. 对Aad和解密结果进程Mh计算生成TAG, 和加密产生的TAG进行比对可以验证加/解密过程的完整性

版权声明:本文为Asp1rant原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/Asp1rant/p/13691599.html