首页 > 编程知识 正文

aes乘法运算,aes算法的分组长度

时间:2023-05-05 06:48:34 阅读:29296 作者:627

对称加密对称加密是最快速、最简单的加密方式之一,加密(encryption )和解密(decryption )使用相同的密钥(secret key )。

对称加密通常使用相对较小的密钥,通常小于256位。 因为密钥越大,加密越强,但加密和解密过程越慢。

对称加密的一大缺点是密钥的管理和分配。 也就是说,问题是如何将密钥发送到需要解密消息的人手中。 在发送密钥的过程中,密钥被黑客们拦截的风险很大。 实际上,对称加密的密钥通常是不对称加密的,并传送给需要它的人。

不对称加密不对称加密为数据加密和解密提供了非常安全的方法。 它使用一对密钥、公钥(公共密钥)和私钥(私有密钥)。 私钥只能由一方安全保管,不得泄露给外界,但公钥可以分发给请求它的人。 不对称加密是用一个密钥加密的,解密需要另一个密钥。

AES简介高级加密标准(英文:高级加密标准,简称: AES ),密码学又称Rijndael加密法,是美国联邦政府采用的块加密标准。 这个标准代替了原来的DES,已经被很多人分析,在世界上广泛使用。 经过5年的评选流程,高级加密标准由美国国家标准技术研究院(NIST )于2001年11月26日发布于FIPS PUB 197,于2002年5月26日成为有效标准。 2006年,高级加密标准成为对称密钥加密中最流行的算法之一。

严格来说,密码说明与AES和Rijndael加密方法不完全相同。 因为Rijndael加密方法可以支持更大范围的块和密钥长度。 AES的块长度固定为128位,密钥长度为128,192或256位。 Rijndael使用的密钥和块长度是32位整数倍,可以以128位为下限,以256位为上限。 用于加密的密钥由Rijndael密钥生成方案生成。

AES加密过程在44字节矩阵上操作,该矩阵也称为“状态”,其初始值是明文块。 (矩阵中的元素大小是明文块中的字节。 (由于Rijndael加密方法支持更大的块,矩阵行数根据需要增加。)对于加密,每个回合的AES加密周期包括四个步骤(最后一个回合除外)。

AddRoundKey (矩阵中的每个字节与其循环密钥)进行XOR运算; 每个子密钥由密钥生成方案生成。 SubBytes :通过非线性替换函数,用查找表方式将各字节替换为对应的字节。 ShiftRows :循环移位矩阵中的每个横列。 MixColumns :用于充分混合矩阵中各直进的操作。 此过程使用线性变换混合每列的4个字节。 最后一个加密周期跳过MixColumns步骤,并将其替换为另一个AddRoundKey。

加密标准AES是分组密码,分组密码是指将明文分成一组,各组长度相等,一次加密一组数据,直到明文完全加密。 AES标准规范将数据包长度限制为128位。 也就是说,每个数据包为16字节(每字节8位)。 密钥长度可以是128位、192位或256位。 根据密钥的长度,推荐的加密循环数不同。 请参照下表。

AES密钥长度(32位字)分组长度(32位字)加密回合数AES-1284410 AES-1926412 AES-2568414对称加密方式的发展趋势侧重于分组加密。 组加密算法通常由两部分组成:密钥扩展算法和加密(解密)算法。 密钥扩展算法将b字节用户主密钥扩展为r个子密钥。 加密算法由密码学中的弱函数f和r的子密钥重复r次构成。 混乱和密钥扩散是分组密码算法设计的基本原则。 防止已知明文的差分和线性攻击,变长密钥和分组是该体制的设计要点。

AES加密块的分组长度必须为128位,密钥长度为128位、192位、256位之一(块和密钥长度不够时进行补充)。

AES的密钥扩展AES密钥扩展算法的输入值是由4个字(16字节)、输出值是44个字)构成的一维线性排列。 伪代码展示了这种扩展。

key扩展(byte key [ 16 ],word w[44] ) wordtempfor ) I=0; i4; I )//将输入的密钥直接复制到扩展密钥数组的前四个字符w[I]=word(key[4*I]、key[4*i 1]、key[4*i 2]、key[4*i 3] ); temp=w[i-1]; 对于if(Imod4==0(/w数组下标为4的倍数的元素,使用更复杂的函数进行temp=subword(rotword(temp ) ) rcon ) I/4 ); w[i]=w[i-4] temp; //对于每个新追加的字w[i],依赖于w[i-1]和w[i-4]} RotWord的功能即使1个字的4字节循环向左移动1字节,也是字循环。

SubWord利用s框对输入字的每个字节进行字节代替。

Rcon[i]是圈常数,表示单词。 这个单词最右边的3字节总是0。 因此,单词和Rcon之间的异或只能与该单词的最左边的字节不同或不同。 每个倒圆角的常数都不同,其定义如下:

Rcon[i] = (RC[i],0,0,0),其中RC[1] = 1,RC[i] = 2•RC[i-1] 乘法是定义在域GF(28)上的。
  RC[i]的值按照十六进制表示为

  轮常量取不同值就是为了消除不同轮密钥产生方式上的对称性或相似性。

密钥扩展算法的设计规范 找到密钥或轮密钥的部分位不足以计算出轮密钥的其他位;它是一个可逆的变换(即知道扩展密钥中任何连续的Nk个字能够重新产生整个扩展密钥,Nk是构成密钥所需的字数);能够在各种处理器上有效地执行;使用轮常量消除对称性;将密钥差异性扩散到轮密钥中的能力,即密钥的每个位能影响轮密钥的许多位;足够的非线性以防止轮密钥的差异完全由密钥的差异所决定。 改进–等价的逆算法

  上文所述的标准解密流程与标准加密流程并不完全一致,加密每一轮的流程是:字节代替–>行移位–>列混淆–>轮密加。而解密每一轮的流程是:逆向行移位–>逆向字节代替–>轮密加–>逆向列混淆。
  可以对解密构成进行改进,使得解密流程与加密流程等效。
  1、交换逆向行移位和逆向字节代替:
  由于逆向行移位并不影响state数组中字节的内容,而逆向字节代替也不会影响state数组中字节的位置,因而两者可以交换顺序而不影响解密。
  2、交换轮密钥加和逆向列混淆:
  这两种操作均不会改变state中字节的顺序,给定状态Si和给定轮密钥wi,可证明
  逆向列混淆(Si⊕wi)= [逆向列混淆(Si)]⊕[逆向列混淆(wi)]
  这个等式显然是正确的,因而如果要改变这两种操作的顺序,则必须改进逆向列混淆的操作,即先对轮密钥应用逆向列混淆(注意,无需对首尾的轮密钥应用逆向列混淆)。最终,改进后的解密流程如下图:

PKCS5Padding、PKCS7Padding 和NO Padding

  PKCS7Padding跟PKCS5Padding的区别就在于数据填充方式,PKCS7Padding是缺几个字节就补几个字节的0,而PKCS5Padding是缺几个字节就补充几个字节的几,好比缺6个字节,就补充6个字节的6 。

分组加密五种加密模式

  分组密码有五种工作体制:1.电码本模式(Electronic Codebook Book (ECB));2.密码分组链接模式(Cipher Block Chaining (CBC));3.计算器模式(Counter (CTR));4.密码反馈模式(Cipher FeedBack (CFB));5.输出反馈模式(Output FeedBack (OFB))。
  在密码学中,分组密码操作模式是使用分组密码来提供诸如机密性或真实性的信息服务的算法。基于分组的对称密码算法比如DES/AES算法只是描述如何根据秘钥对一段固定长度(分组块)的数据进行加密,对于比较长的数据,分组密码工作模式描述了如何重复应用某种算法加密分组操作来安全地转换大于块的数据量。
  简单的说就是,AES算法描述怎么加密一个数据块,分组密码工作模式决定了如果重复加密比较长的多个数据块。(图片来源Wikipedia)

ECB

  ECB(Electronic Codebook, 电子密码本)模式是最简单的加密模式,明文消息被分成固定大小的块(分组),并且每个块被单独加密。
  每个块的加密和解密都是独立的,且使用相同的方法进行加密,所以可以进行并行计算,但是这种方法一旦有一个块被破解,使用相同的方法可以解密所有的明文数据,安全性比较差。
  适用于数据较少的情形,加密前需要把明文数据填充到块大小的整倍数。
[外链图片转存失败(img-BjxFH3ID-1567082870635)(https://upload.wikimedia.org/wikipedia/commons/d/d6/ECB_encryption.svg)]
[外链图片转存失败(img-zA2AjtBv-1567082870635)(https://upload.wikimedia.org/wikipedia/commons/e/e6/ECB_decryption.svg)]

CBC

  CBC(Cipher Block Chaining, 密码块链)模式中每一个分组要先和前一个分组加密后的数据进行XOR异或操作,然后再进行加密。
  这样每个密文块依赖该块之前的所有明文块,为了保持每条消息都具有唯一性,第一个数据块进行加密之前需要用初始化向量IV进行异或操作。
  CBC模式是一种最常用的加密模式,它主要缺点是加密是连续的,不能并行处理,并且与ECB一样消息块必须填充到块大小的整倍数。
[外链图片转存失败(img-2Q9xWu2b-1567082870635)(https://upload.wikimedia.org/wikipedia/commons/8/80/CBC_encryption.svg)]
[外链图片转存失败(img-KObBOiGi-1567082870636)(https://upload.wikimedia.org/wikipedia/commons/2/2a/CBC_decryption.svg)]

CFB

  CFB(Cipher Feedback, 密码反馈)模式和CBC模式比较相似,前一个分组的密文加密后和当前分组的明文XOR异或操作生成当前分组的密文。CFB模式的解密和CBC模式的加密在流程上其实是非常相似的。
[外链图片转存失败(img-4OKJOCty-1567082870636)(https://upload.wikimedia.org/wikipedia/commons/9/9d/CFB_encryption.svg)]
[外链图片转存失败(img-QqQTiiqZ-1567082870636)(https://upload.wikimedia.org/wikipedia/commons/5/57/CFB_decryption.svg)]

OFB

  OFB(Output Feedback, 输出反馈)模式将分组密码转换为同步流密码,也就是说可以根据明文长度先独立生成相应长度的流密码。通过流程图可以看出,OFB和CFB非常相似,CFB是前一个分组的密文加密后XOR当前分组明文,OFB是前一个分组与前一个明文块异或之前的流密码XOR当前分组明文。由于异或操作的对称性,OFB模式的解密和加密完全一样的流程。
[外链图片转存失败(img-a13ajGmx-1567082870636)(https://upload.wikimedia.org/wikipedia/commons/b/b0/OFB_encryption.svg)]
[外链图片转存失败(img-vuWbUSn5-1567082870637)(https://upload.wikimedia.org/wikipedia/commons/f/f5/OFB_decryption.svg)]

CTR

  CTR(Counter, 计数器)模式与OFB模式一样,计数器模式将分组密码转换为流密码。它通过加密“计数器”的连续值来产生下一个密钥流块。
[外链图片转存失败(img-W8QMLqF9-1567082870637)(https://upload.wikimedia.org/wikipedia/commons/4/4d/CTR_encryption_2.svg)]
[外链图片转存失败(img-bw7z9UNL-1567082870637)(https://upload.wikimedia.org/wikipedia/commons/3/3c/CTR_decryption_2.svg)]

base64

  Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。

AES实现

AES加密算法的详细介绍与实现:https://blog.csdn.net/qq_28205153/article/details/55798628
AES/CBC/PKCS5Padding/128(二):https://blog.csdn.net/essity/article/details/86715866

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。