本文是根据自己对AES加密算法的理解,总结并整理出的AES算法数学基础。表述方面存在诸多不足,后续会慢慢改进。

1、字节运算:有限域GF(2^8)上的运算

(1)有限域GF(2^8)

有限域GF(2^8)表示特征为2的具有2^8个元素的有限域,这里表示成系数在{0,1}中的多项式集合:

b(x)={b7x^7+b6x^6+b5x^5+b4x^4+b3x^3+b2x^2+b1x+b0}

这样任意的8位二进制数就和有限域中的一个多项式建立了一一对应的关系。

(2)加法运算

在多项式表示中,GF(2^8)上两个元素的和仍然是一个次数不超过7的多项式,其系数等于两个元素对应的系数的模2加(即异或)。

由于每个元素的加法逆元等于自己,所以减法和加法相同。

(3)乘法运算

在AES算法中,若两个多项式进行乘法运算,运算的方法为两个多项式相乘,若运算的结果超过8次方,则必须对此结果对一个多项式m(x)进行模运算。AES算法中,这个8次不可约多项式确定为m(x)=x^8+x^4+x^3+x+1。

乘法原理:

在二进制中,所有的数都能用0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80异或得到。

0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80的表示如下:

也就是说,一切乘法的结果都由用上式得到。

乘法运算代码如下:

unsigned char multiply(unsigned char a, unsigned char b)
{unsigned char temp[8] = { a };unsigned char tempmultiply = 0x00;int i = 0;for (i = 1; i < 8; i++) {temp[i] = XTIME(temp[i - 1]);//经过这个循环可以得到一串包含8个字符的数组。//分别是0x01*x,0x02*x,0x04*x,0x08*x,0x10*x,0x20*x,0x40*x,0x80*x。}tempmultiply = (b & 0x01) * a;for (i = 1; i <= 7; i++){tempmultiply ^= (((b >> i) & 0x01) * temp[i]);//通过这个循环,另一个乘数b右移一位和0x01进行与运算,//分别和8个字符相乘,再把相乘结果异或,就得到a*b的结果}return tempmultiply;
}

(4)x乘法

GF(2^8)上还定义了一个运算,称为x乘法,其定义为:

x*b(x)=b7x^8+b6x^7+b5x^6+b4x^5+b3x^4+b2x^3+b1x^2+b0x(modm(x))

XTIME函数的含义是求一个数x与0x02的乘积,一般求一个数的2倍,都是左移一位。要计算有限域乘法,必须先确定GF上的8次不可约多项式。AES算法中,多项式确定为x^8+x^4+x+1,如果最高位是1的话,左移一位的同时要异或0x1b,是因为高位是1的话,再继续左移会超出域的最大值,这个时候需要除以同余式,也就是异或0x1b。

代码如下:

unsigned char XTIME(unsigned char x)
{return (x<<1^(x&0x80)?0x1B:0x00));
}

AES加密算法的数学基础相关推荐

  1. aes算法的C语言实现代码,AES加密算法c语言实现代码

    AES加密算法c语言实现代码 #include "stdio.h" #include "memory.h" #include "time.h" ...

  2. Android AES加密算法,现在实际上

    昨天,老板让我来看看android加密算法.于是在网上找了找,发现AES加密算法.(当然,MD5,BASE64什么http://snowolf.iteye.com/blog/379860这篇文章列举了 ...

  3. AES加密算法动画演示

    波士顿大学的Howard Straubing做了这么一个动画来展示AES加密算法的演示,挺不错的. 点击这里看全屏

  4. JS 与 JAVA 跨语言实现 RSA 和 AES加密算法

    简介: 开发中为了数据的安全性使用加密算法对数据进行加密是一种很常见的情况,但就一种语言来说,直接使用提供的相应的库进行少许封装是一件很容易的事.但是在一些情况下我们可能需要跨语言来实现,比如前后端分 ...

  5. aes加密算法_令你的文件安全有了新方法AES-256-GCM加密网站免费用

    您是否一直在寻找文件安全性的解决方案? 有一个免费的文件加密网站,在这里效果很好. 常用的加密技术主要分为两类:接近表示加密和不接近表示加密,AES加密是一种接近表示加密,即使用加密 泄露秘密沟通的关 ...

  6. AES加密算法的VHDL实现

    AES加密算法的VHDL实现 步骤: 一.轮密钥加 (1) 拷贝16字节的输入数组到4*4的态矩阵(state)中去. (2) 用密钥调度表的前四行对态矩阵(state)实行一个字节一个字节的xor( ...

  7. java delphi aes加密算法_Delphi AES,又一个加密算法例子

    /// //AES DEMO V1.0// //作者:ksaiy// //欢迎使用由ksaiy制作的AES加密算法演示程序,此算法为标准的AES算法,你可以根据的 //的自己需要进行变形.具体怎么操作 ...

  8. Android AES加密算法及事实上现

    昨天老大叫我看看android加密算法.于是网上找了找,找到了AES加密算法.(当然还有MD5,BASE64什么的http://snowolf.iteye.com/blog/379860这篇文章列举了 ...

  9. Android AES加密算法及其实现

    找到了AES加密算法.(当然还有MD5,BASE64什么的http://snowolf.iteye.com/blog/379860这篇文章列举了很多,但是基本都是j2se平台的,android平台不一 ...

最新文章

  1. 1.19 实例:Java求数组元素的最大和最小值
  2. 【STM32】待机唤醒程序示例
  3. Koa(1)之——koa入门
  4. Android系统共享一套sdk
  5. Leetcode 系列 | 反转链表
  6. c语言大数的加减运算,求用C编个大数加减法运算程序
  7. 20162303 队列加分项-杨辉三角
  8. hive分桶表join_Hive知识梳理
  9. 「新手向」koa2从起步到填坑
  10. 利用计算机进行频数分布表制作,excel制作交叉分组表,excel分组频数分布表
  11. 小白文件管理器android,小白文件管理器手机版
  12. 蓝桥杯嵌入式CT117E硬件开发平台经验分享11 | 第九届蓝桥杯国赛题
  13. [WARNING IsDockerSystemdCheck]: detected “cgroupfs“ as the Docker cgroup driver. The recommended dri
  14. PDJCAD皮带机设计软件
  15. 内核tcp协议栈SACK的处理
  16. 使用 libcurl 在windows平台遇到的问题
  17. 详解Python中的文本处理
  18. 中国恐慌指数VIX(基于沪深300的)
  19. 深度解读当前主流公链的竞争格局
  20. http请求之GET、POST对比分析

热门文章

  1. 基于Python web框架Django+Bootstrap的房源推荐系统
  2. 从crc32到linux内核实现
  3. python win32 EnumWindows
  4. Pandas快速入门之第三节使用pandas去重、合并、已经统计出现次数
  5. Dubbo ---- 启动时检查-直连提供者
  6. 领跑IT运维 广通COSS 3.0新品上线
  7. whisper使用时候报错
  8. qq推广移动端无法唤醒qq“显示需要更新QQ”
  9. 123457123456#2#----com.ppGame.ShiZi43--前拼后广--shizi游戏_pp
  10. JumpServer 审计录像设置