论文无忧网提供:计算机毕业论文范文|计算机毕业设计|计算机毕业论文
栏目导航 ASP Java Web .NET VB6.0 JAVA VC VF DELPHI PB 计算机网络 计算机科学与技术 PHP 安卓APP 其他 C# 代写论文
当前位置: > 计算机 > 计算机科学与技术 >

kasumi算法的研究与vc实现(论文+程序)

4.2人机界面设计

此次设计的重点在于KASUMI算法的研究,但是为了更好的验证和实现KASUMI算法,做了图形化的实现系统,现将该系统的功能做详细的介绍: copyright paper51.com

1、图4-3为该系统的主要界面也是唯一的界面。该界面由几个模块组成:输入区、输出区和操作区。该系统是为了验证KASUMI算法的正确性,所以产生明文和密钥有两种方式:手动输入和随机输入。在前面引言里我已经提到KASUMI算法是对64位二进制位明文和密钥为128位二进制位。为了方便验证,我将用十六进制来代替二进制,这样在输入的时候比较方便,因为1位十六进制位代表4位二进制位,这样大大减小了明文和密钥的长度,也减少了不必要的麻烦,如:如果输入二进制位的话,你要慢慢的输入64位,一不注意就会导致输入错误,如果用十六进制位的话,输入才16位,这样比较容易输入也比较容易查出错误来。 copyright paper51.com

2、当启动对话框准备输入的时候,如果在明文和密钥没有输入或随机产生的情况下,系统会自动弹出一个模态对话框,提示用户明文必须输入16位,如图4-4。当正确输入明文但没有输入密钥的情况下,系统会自动弹出一个模态对话框,提示用户密钥必须输入32位,如图4-5。当明文和密钥在输入的情况下,但是输入的长度并不是16位或者32位,系统会自动弹出一个模态对话框,提示用户明文必须输入16位或者密钥必须输入32位,如图4-6、4-7。

内容来自论文无忧网 www.paper51.com

   内容来自论文无忧网 www.paper51.com

图 4-3 人机对话界面                    图4-4  明文为空的报错界面

http://www.paper51.com

3、随机产生明文和密钥,本系统主要是为了验证KAUSMI算法程序实现的正确性,并没有应用KASUMI算法去对文件或文字进行加密或解密。就是因为只是验证程序实现的正确性,所以我采用了随机产生明文和密钥的方法以便快速验证,并不需要每次都去手动输入,这样大大提高了验证的效率。随机产生明文和密钥非常方便,在随机产生明文和密钥的时候它不会出现错误,比如它不可能出现不符合要求的字符,也不可能出现长度不正确。因为随机产生明文和密钥的时候已经限定了它的字符和长度。随机产生明文和密钥并进行加密如图4-9。

paper51.com

  

copyright paper51.com

图4-5密钥输入报错界面                   图4-6 明文输入报错界面

http://www.paper51.com

   内容来自www.paper51.com

图4-7密钥输入报错界面                    图4-8 加密界面

内容来自www.paper51.com

4、解密功能,在3GPP中,KASUMI算法更多应用的只是它的加密功能,因为KASUMI算法产生的密文只是作为3GPP中的密钥,所以不需要去解密。但是在本系统中增加了KASUMI算法的解密功能,因为我要去验证KAUSMI算法程序是否正确。KASUMI的解密函数是从KASUMI的加密函数的定义中导出来的,这里不用去理解它是怎么导出来的,将在关键代码分析的时候具体给出。在验证解密的时候也同样运用了随机产生密钥和密文,随机产生的好处见以上第3点。解密功能如图4-9、4-10

内容来自论文无忧网 www.paper51.com

   http://www.paper51.com

图4-9 加密并解密界面                 图4-10 解密界面 http://www.paper51.com

本系统相当于其他系统非常简单,功能也非常少。但是这是按照本课程设计需要所设计的,本课程设计的重点不在于此。重点的是算法的研究与算法的程序实现。 内容来自www.paper51.com

5 关键代码分析 http://www.paper51.com

本设计的重点是KASUMI算法的研究,除了算法程序以外的关键代码相对较少,现在着重分析KASUMI算法的程序实现代码: paper51.com

5.1FI函数的程序实现 http://www.paper51.com

static u16 FI( u16 indata, u16subkey )

内容来自www.paper51.com

{ http://www.paper51.com

       u16nine, seven; 内容来自www.paper51.com

       staticu16 S7[] = {}; http://www.paper51.com

       staticu16 S9[] = {};

内容来自www.paper51.com

       nine  = (u16)(indata >> 7);//通过移位获取16位数据的高9位 内容来自论文无忧网 www.paper51.com

       seven= (u16)(indata & 0x7F); //通过移位获取16位数据的低7位 copyright paper51.com

       nine  = (u16)(S9[nine]  ^ seven); 内容来自www.paper51.com

       seven= (u16)(S7[seven] ^ (nine & 0x7F));

copyright paper51.com

       seven= seven ^ (subkey >> 9); http://www.paper51.com

       nine  = nine  ^ (subkey & 0x1FF);

paper51.com

       nine  = (u16)(S9[nine]  ^ seven); 内容来自www.paper51.com

       seven= (u16)(S7[seven] ^ (nine & 0x7F)); paper51.com

       indata= (u16)((seven << 9) + nine);//将seven左移9位,然后与nine相加,//转换成16位输出。

内容来自www.paper51.com

       return(indata );//返回16位

copyright paper51.com

}

paper51.com

FI函数包含一个16位的数据输入indata和一个16位的子密钥subkey,输入的indata被分成不等的两部分,左半部分nine是9位,右半部分seven是7位,其中,indata = nine || seven 。与此类似,密钥subkey也被分成一个7位的子密钥和一个9位的子密钥。每一个FI函数使用两个S-box:S7映射一个7位的输入到一个7位饿输出,S9映射一个9位的输入到一个9位的输出。最后将得到indata=seven || nine ,即16位的输出。 内容来自论文无忧网 www.paper51.com

注:这里为了节约纸张,S7和S9表的内容没有给出,参见2.2.5 S-box paper51.com

5.2FO函数的程序实现 内容来自论文无忧网 www.paper51.com

static u32FO( u32 indata, int n ) 内容来自论文无忧网 www.paper51.com

{ 内容来自论文无忧网 www.paper51.com

       u16 left, right; copyright paper51.com

       left  = (u16)(indata >> 16);//移位得到高16位

copyright paper51.com

       right = (u16) indata;//强制转换成16位,即取低16位

内容来自www.paper51.com

       left = left ^ KOi1[n];

copyright paper51.com

       left = FI( left, KIi1[n] );

copyright paper51.com

       left = left ^ right; copyright paper51.com

       right = right ^ KOi2[n]; http://www.paper51.com

       right = FI( right, KIi2[n] ); 内容来自论文无忧网 www.paper51.com

       right = right ^ left; 内容来自www.paper51.com

       left = left ^ KOi3[n];

http://www.paper51.com

       left = FI( left, KIi3[n] ); copyright paper51.com

       left = left ^ right; paper51.com

       indata = (((u32)right) <<16) + left;//移位合并 paper51.com

       return( indata ); 内容来自www.paper51.com

}

http://www.paper51.com

FO函数的输入由一个32位的数据输入indata和两个子密钥组成:一个48位的KO和一个48位的KI。32位的数据输入indata被分成两半,left和right,其中:indata = left || right 。并且48位的子密钥分成3个16位的子密钥,其中:KOi= KOi,1 || KOi,2 || KOi,3 http://www.paper51.com

KIi = KIi,1 || KIi,2 ||KIi,3 paper51.com

对每一个整数j(1<=j <= 3),函数FO第j次循环上的运算定义如下: copyright paper51.com

rightj=FI(leftj-1 KOi,j,KIi,j)rightj-1 paper51.com

leftj=rightj-1

内容来自论文无忧网 www.paper51.com

最后得到函数FO的32比特的输出indata= left3||right3。

内容来自论文无忧网 www.paper51.com

5.3FL函数的程序实现 内容来自www.paper51.com

static u32FL( u32 indata, int n ) 内容来自www.paper51.com

{ http://www.paper51.com

       u16 left , right , a , b ; 内容来自www.paper51.com

       left = (u16)(indata >> 16);//移位的高16位 内容来自论文无忧网 www.paper51.com

       right = (u16)(indata) ; //强制转换成16位,即取低16位

内容来自论文无忧网 www.paper51.com

       a  = (u16) (left & KLi1[n]) ;

http://www.paper51.com

       right = right ^ ROL16(a , 1) ; 内容来自论文无忧网 www.paper51.com

       b  = (u16)(right | KLi2[n]) ;

http://www.paper51.com

       left = left ^ ROL16(b , 1) ;

内容来自论文无忧网 www.paper51.com

       indata = (((u32)left) << 16)+ right ;//移位合并

内容来自论文无忧网 www.paper51.com

       return( indata );

内容来自www.paper51.com

} http://www.paper51.com

FL函数的输入由32位的数据输入indata和32位的子密钥KL组成,子密钥分为两个16位的子密钥KLi,1和KIi,2,其中,KL =KLi,1 || KLi,2。输入的数据indata被分成两个16位的部分,left和right,其中,indata= left || right 。 内容来自论文无忧网 www.paper51.com

------分隔线----------------------------
联系方式