首页 > 编程知识 正文

python实现aes加密,matlab移位函数

时间:2023-05-04 18:38:46 阅读:111433 作者:488

我最近在学习加密算法。 我上周学习了RSA公钥密码算法。 仪式很简单。 本想用FPGA实现RSA算法,但自己实际编码后发现,FPGA本身附带的加法器、乘法器.为32位。 问题是,使用1024位加密算法时,直接运算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加密过程包括四个操作:字节替换(SubBytes )、行移位(ShiftRows )、列模糊化(round keys )和循环密钥添加。 解码过程是各自对应的逆操作。 由于各步骤的操作是可逆的,因此如果按照相反的顺序进行解码,则能够恢复明文。 解密过程中各回合的密钥分别由初始密钥扩展。 算法中的16字节明文、密文和循环密钥都用4x4矩阵表示。

波士顿大学的Howard Straubing制作了这样的视频,展示了AES加密算法的演示,但很好。

下面分别列出了加密进程的上述五种操作

这里是演示视频(如果下面的视频无效,请单击此处打开) )。

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

目前,只是实现了AES加密的算法,还没有实现AES解密的算法。 从这周开始实现。 写代码3天,调试3天,matlab被打孔了。 我写的都是正确的。 贴上matlab的加密代码(私钥128bit ) (部分) :

清除全部; clc; info='hello i am koala '; %明文[x,y]=size(info );

forI=1:16info(I )=uint8) info(I ); end clear i; clear x y; for

I=1:16k(I )=uint8) I64; %私钥enddisp('key=' ); str=sprintf('%s ',k );

DISP(str; %明文组织数组for i=1:4 for j=1:4

m(j,I )=uint8) info((I-1 ) *4 j ); endendstr=sprintf(mingWen:

%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 ); forI=1:10s=Sbox(s; s=byterot(s; if(I(=10 ) ) ) )。

s=mixcol(s; ends=addk(s,keyexp1) :i*4 1:i*4 4); 结束

str=sprintf(miWen: ); DISP(str; DISP(s; str=sprintf(x ),s );

DISP(str;

执行结果如下所示。

解密的过程与加密略有不同,都是一些逆运算。 (加密结束后,解密会顺利进行。 我花了两个小时写了解密程序。

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

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