加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

[转载]AES加密算法的matlab实现

(2016-11-11 12:27:31)
标签:

转载

不错
原文地址:AES加密算法的matlab实现作者:Koala
最近一直在学习加密算法,上上一个星期学习了RSA公钥密码算法,公式挺简单的,本来想着把RSA算法用FPGA实现的,但是自己实际编码之后,发现FPGA本身自带的加法器,乘法器...都是32位的,那么问题就来了,要是使用1024位的加密算法时,直接运算fpga是吃不消的,也不可能综合的过去,于是网上搜了好几篇论文,用来用FPGA实现的,但是看得好吃力,先放一放了。还是先从简单的入手吧,对称加密算法AES,这个算法加密过程可是比RSA复杂多了,但是他用不到高位的加法器,乘法器,易于用fpga实现,所以就学习了起来。
1.AES的起源
1997年9月,NIST征集AES方案,以替代 DES。

1999年S月,以下5个方案成为最终候选方案:MARS,RCS, RiJndael,Serpent, Twofish。

2000年10月,由比利时的joan Daemen 和Vincent Rijmen提出的算法最终胜出。 Rijndaei读成Rain doll

2.AES的设计原则
能抵抗所有已知的攻击; 在各种平台上易于实现,速度快; 设计简单。
Rijndael是一个分组密码算法,其 分组长度和密钥长度相互独立,都可以 改变。

3.算法流程如下


AES加密过程涉及到4种操作:字节替代(SubBytes)、行移位(ShiftRows)、列混淆(MixColumns)和轮密钥加(AddRoundKey)。解密过程分别为对应的逆操作。由于每一步操作都是可逆的,按照相反的顺序进行解密即可恢复明文。加解密中每轮的密钥分别由初始密钥扩展得到。算法中16字节的明文、密文和轮密钥都以一个4x4的矩阵表示。

波士顿大学的Howard Straubing做了这么一个动画来展示AES加密算法的演示,挺不错的。
接下来就加密过程而言分别对上述5种操作进行演示
这里是演示动画(如果下面的视频无效,请单击这里打开)

笔者先从matlab实现AES算法开始,然后再转移到Verilog硬件描述语言中,利用FPGA实现数据流的加密。关于matlab,笔者有一点要吐槽的地方,matlab计算工具本身也是有错误,我在调试AES算法的时候,找了很久才发现不是算法的问题,而是工具问题,matlab的规则有些方面如果不熟悉的话,就会得到错误的计算结果,不如说,在matab的命令输入窗口中输入x=uint8(255);x+5;结果你会得到255。按照正常的理解来的话,x是8位的无符号整数最高表示255,但是如果你加上5后肯定会溢出,但是matlab在是最大值的时候就不溢出,他直接不加了,直接输出最大值。。。

目前只是实现了AES加密的算法,AES解密的算法还没有实现,这周开始实现。代码写了三天,调试了三天,被matlab坑了,我本来写的都对的。。。下面贴一下matlab的加密代码(秘钥128bit)(部分):
clear all; clc; info='hello i am koala';%明文 [x,y]=size(info); for i=1:16 info(i)=uint8(info(i)); end clear i; clear x y; for i=1:16 k(i)=uint8(i+64);%秘钥 end disp('key=') ;str=sprintf('%s',k); disp(str); %明文组织排列 for i=1:4 for j=1:4 m(j,i)=uint8(info((i-1)*4+j)); end end str=sprintf('ming wen: %s',m); disp(str); disp(m); %秘钥组织排列 for i=1:4 for j=1:4 key(j,i)=k((i-1)*4+j); end end [keyexp1,rcon]=keyexp(key); %开始运算 s=addk(m,key); for i=1:10 s=sbox(s); s=byterot(s); if(i~=10) s=mixcol(s); end s=addk(s,keyexp1(:,i*4+1:i*4+4)); end str=sprintf('mi wen:'); disp(str); disp(s); str=sprintf('x ',s); disp(str);
下面是运行结果:
解密的过程与加密有些不同,都是一些逆运算。(加密搞定了,解密就好搞了,我花了两个小时就写出来了解密程序)。
http://s7/mw690/0025qXBpty6WvMprzpQ46&690

笔者的matlab加密解密matlab运算展示:

0

  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有