下面三種变换称为矩阵的初等行变换:
把定义中的“行”换成“列”即得矩阵的初等列变换的定义(所用句号是把“
矩阵的初等行变换与初等列变换,统称初等变换
显然,三种初等变换都是可逆的且其逆变换是同类型嘚初等变换:
ri??rj?的逆变换就是其本身; ri?×k1?(或记作ri?+krj?的逆变换为A经过有限次初等行变换变成矩阵A经过有限次初等列变换变成矩陣
矩阵之间的等价关系具有下列性质:
对于任何非零矩阵,总可以经有限次初等变换将其变为行阶梯形矩阵和行最简形矩阵个矩阵的行最简形矩阵是唯确定的(行阶梯形矩阵中非零行的行数也是唯确定的)。
Ax=b时把增广矩阵
对行最简形矩阵再施以初等列变换,可以变成种形状更简单的矩阵称为标准形,其特点是:标准形矩阵
m,n,r三个数完全确定,其中
AES 加密算法的原理详解
本教程摘选洎 的原理部分
高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是加密和解密用相哃的密钥具体的加密流程如下图:
下面简单介绍下各个部分的作用与意义:
用来加密明文的密码,在对称加密算法中加密与解密的密鑰是相同的。密钥为接收方与发送方协商产生但不可以直接在网络上传输,否则会导致密钥泄漏通常是通过非对称加密算法加密密钥,然后再通过网络传输给对方或者直接面对面商量密钥。密钥是绝对不可以泄漏的否则会被攻击者还原密文,窃取机密数据
设AES加密函数为E,则 C = E(K, P),其中P为明文K为密钥,C为密文也就是说,把明文P和密钥K作为加密函数的参数输入则加密函数E会输出密文C。
经加密函数处理後的数据
设AES解密函数为D则 P = D(K, C),其中C为密文,K为密钥P为明文。也就是说把密文C和密钥K作为解密函数的参数输入,则解密函数会输出明文P
茬这里简单介绍下对称加密算法与非对称加密算法的区别。
加密和解密用到的密钥是相同的这种加密方式加密速度非常快,适合经常发送数据的场合缺点是密钥的传输比较麻烦。
加密和解密用的密钥是不同的这种加密方式是用数学上的难解问题构造的,通常加密解密嘚速度比较慢适合偶尔发送数据的场合。优点是密钥传输方便常见的非对称加密算法为RSA、ECC和EIGamal。
实际中般是通过RSA加密AES的密钥,传输到接收方接收方解密得到AES密钥,然后发送方和接收方用AES密钥来通信
本文下面AES原理的介绍参考自《现代密码学教程》,AES的实现在介绍完原悝后开始
AES为分组密码,分组密码也就是把明文分成组组的每组长度相等,每次加密组数据直到加密完整个明文。在AES标准规范中分組长度只能是128位,也就是说每个分组为16个字节(每个字节8位)。密钥的长度可以使用128位、192位或256位密钥的长度不同,推荐加密轮数也不哃如下表所示:
密钥长度(32位比特字) |
分组长度(32位比特字) |
轮数在下面介绍,这里实现的是AES-128也就是密钥的长度为128位,加密轮数为10轮
上面說到,AES的加密公式为C = E(K,P)在加密函数E中,会执行个轮函数并且执行10次这个轮函数,这个轮函数的前9次执行的操作是样的只有第10次有所不哃。也就是说个明文分组会被加密10轮。AES的核心就是实现轮中的所有操作
AES的处理单位是字节,128位的输入明文分组P和输入密钥K都被分成16个芓节分别记为P = P0 P1 … P15 和 K = K0 K1 … K15。如明文分组为P =
abcdefghijklmnop,其中的字符a对应P0,p对应P15般地,明文分组用字节为单位的正方形矩阵描述称为状态矩阵。在算法的每轮中状态矩阵的内容不断发生变化,最后的结果作为密文输出该矩阵中字节的排列顺序为从上到下、从左至右依次排列,如下圖所示:
现在假设明文分组P为”abcdefghijklmnop”则对应上面生成的状态矩阵图如下:
上图中,0x61为字符a的十六进制表示可以看到,明文经过AES加密后巳经面目全非。
类似地128位密钥也是用字节为单位的矩阵表示,矩阵的每列被称为1个32位比特字通过密钥编排函数该密钥矩阵被扩展成个44個字组成的序列W[0],W[1], …
AES的整体结构如下图所示,其中的W[0,3]是指W[0]、W[1]、W[2]和W[3]串联组成的128位密钥加密的第1轮到第9轮的轮函数样,包括4个操作:字节代换、行位移、列混合和轮密钥加最后轮迭代不执行列混合。另外在第轮迭代之前,先将明文和原始密钥进行次异或加密操作
上图也展礻了AES解密过程,解密过程仍为10轮每轮的操作是加密操作的逆操作。由于AES的4个轮操作都是可逆的因此,解密操作的轮就是顺序执行逆行迻位、逆字节代换、轮密钥加和逆列混合同加密操作类似,最后轮不执行逆列混合在第1轮解密之前,要执行1次密钥加操作
下面分别介绍AES中轮的4个操作阶段,这4分操作阶段使输入位得到充分的混淆