aes 结尾 特殊字符_也说AES(3)

c06ffbb7a7f0fcb035c984405112dc6d.png

本来准备不写AES的具体实现的,但是这一段时间在研究MATLAB的类和代码生成,于是就拿AES算法作为一个例子,这里AES算法的实现还是不作为重点,我会把代码都放上去但是不会太过详细的解释。

首先说一下MATLAB中类的支持 ,在柳梦璃:Matlab 红黑树已经做了简单介绍。现在假设你不想把所有的方法和属性定义在同一个文件中怎么办?也是有办法的,首先新建一个文件夹并命名为@Classname,在这里就是@AES。然后就可以在这个文件中按照普通写函数的方法写类的方法了,比如我建立的文件夹和其中的文件如下图:

6f309aad3d33e91bbd501281dd584493.png

而且从近期的MATLAB版本也支持同一个文件定义多个函数了,我在有些文件中写了多个函数,而不需要给每个函数都另外新建一个m文件。如果把方法定义在其他文件中,那么也需要在类的主文件做一下声明,下面贴出AES.m的文件内容。

classdef 

其实跟类成员无关的方法我都定义为了静态方法,其他类方法调用只需要使用http://AES.xxx就可以调用。以下将会贴出其中的方法定义,首先是将一个uint32转换为4个uint8的函数Word2Bytes。

function

然后有个功能相反的函数Bytes2Word。

function

接着我在KeyExpansion.m中定义了两个函数,主函数为KeyExpansion,注意coder.inline('never'),这一句控制代码的生成过程,在生成代码的过程中这个函数不会变成内联函数,会生成一个独立的函数,如果不加这一句那么无法保证一定能生成一个独立函数。

function

接下来就是完成S盒和逆S盒替换的SubBytes。

function

接着就是对矩阵进行行移动的函数ShiftRows。

function

然后有一个比较复杂的函数MixColumns,这个函数之所以复杂是因为它使用的乘法和加法运算不同于普通定义,需要重新定义这两种运算。

function

最后一个函数就是密钥轮加函数AddRoundKey,由于它需要W矩阵,所以它和实例相关不能定义为静态。

function

所有的函数准备完备后加密函数也就是上述函数的简单组装。

function

到这里类的定义工作完成,但是很可惜MATLAB并不支持直接生成类,虽然MATLAB确实支持生成cpp,但是它生成的cpp代码就是能在cpp编译器上编译而已,并没有使用cpp的各种特性。生成代码必须要一个入口函数,所以我定义了入口函数和测试用例,整个工程结构如下。

282e3e69b178c53a10a38d115df0554c.png

入口函数很简单, 就简单建立了一个实例和调用了以下加密函数,至于解密函数请各位自己写一下吧,毕竟所有的材料都准备好了。

function

测试用例,和一个辅助函数的定义也给出,如下。

clear

最后,调用MATLAB coder快乐生成代码,可以看出我需要不内联的函数生成了两个独立文件,这样我就可以快乐重用了。

d0dfc40158957a8f46e06a8aa04bee18.png

最后各位大佬,我使用的是MAC版的MATLAB 2018a。各位有没有更新的版本啊,这个(he xie ban)一直都没有更新啊。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值