python实现aes加解密,aes加密算法python实现
最近在学加密算法。上周学了RSA公钥密码算法。仪式很简单。本想用FPGA实现RSA算法,但实际编码后发现,附在FPGA上的加法器和乘法器都是32位。问题是,在使用1024位加密算法时,直接运算FPGA是吃不了,也合并不了的。先说简单的。对称加密算法AES。该算法的加密过程比RSA算法复杂得多,但它不能使用更高级的加法器和乘法器,而且容易用fpga实现,因此得到了研究。
1.1的由来。俄歇电子能谱
1997年9月,NIST提出了AES方案来取代DES方案。
1999年9月,以下五种方案成为最终候选方案:火星、RCS、
RiJndael,蛇,两条鱼.
2000年10月,琼代蒙和文森特在比利时
Rijmen提出的算法最终胜出。Rijndaei发音为雨娃娃。
2.2的设计原则。俄歇电子能谱
可以抵御所有已知的攻击;易于在各种平台上实现,速度快;设计很简单。
Rijndael是一种分组密码算法。组领导和密钥长度相互独立,并且可以改变。
3.算法流程如下
AES加密过程包括四个操作:字节替换、移位行、轮密钥和轮密钥相加。解码过程是相应的逆操作。由于每一步的操作都是可逆的,如果以相反的顺序进行解码,就可以恢复出明文。在解密过程中,每一轮的密钥由初始密钥扩展。算法中的16字节明文、密文和循环密钥用4x4矩阵表示。
波士顿大学的霍华德斯特劳宾(Howard Straubing)做了这个视频,展示了AES加密算法的演示,但是非常好。
下面列出了加密过程的上述五种操作。
下面是演示视频(如果下面的视频无效,点击这里打开)。
作者首先用matlab实现了AES算法,然后转换成Verilog硬件描述语言,用FPGA实现了数据流加密。关于matlab,作者有话要抱怨。matlab计算工具本身也有误差。我在调试AES算法的时候,花了很长时间才发现不是算法的问题,而是工具的问题。在matlab的规则中,如果你不熟悉,你会得到错误的计算结果。而是matab x=uint 8(x 5;结果是255。一般的理解是x是8位无符号整数,最高表示为255。但是,如果加5,肯定会溢出来。但是matlab不会在最大值溢出。他不是直接加法,而是输出最大值。
目前只实现了AES加密的算法,没有实现AES解密的算法。从本周开始将会实现。写了3天代码,调试了3天,matlab打孔了。我写的都是对的。粘贴matlab的加密代码(私钥128bit)(部分):
全部清除;clcinfo=你好我是考拉;% platext[x,y]=size(info);
forI=1:16 info(I)=uint 8)info(I);结束清除I;清除x y;为
I=1:16k(I)=uint 8)I64;% private key end disp( key=);str=sprintf(%s ,k);
DISP(str;对于j=1:4,i=1:4的%明文组织数组
m(j,I)=uint 8)info((I-1)* 4j);endendstr=sprintf(温明:
%s ,m。DISP(str;DISP(m;对于j=1:4,i=1:4的%私钥组织数组
key(j,I)=k)(I-1)* 4j);end end [keyexp1,rcon]=keyexp(key);%操作开始。
s=addk(m,key);forI=1:10s=Sbox(s;s=byte rot(s;if(I(=10))).
s=mixcol(s;ends=addk(s,key exp 1):I * 4 1:I * 4 4);目标
str=sprintf(miWen:);DISP(str;DISP(s;str=sprintf(x),s);
DISP(str;
执行结果如下所示。
解密的过程和加密略有不同,都是一些逆运算。(加密后,解密会顺利进行。我花了两个小时编写解密程序。
作者的matlab解密matlab操作演示:
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。