




免费预览已结束,剩余22页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第2章 DES算法及其JAVA程序设计本章的目的是详细讲解现代常规加密的原理。为此我们讨论目前使用最广泛的数据加密标准DES ( Data Encryption Standard )算法。64 bits明文初始置换IP第一轮第二轮置换选择1循环左移循环左移置换选择2置换选择256 bits密钥K1K2第十六轮32 bit对换逆初始置换64 bits密文循环左移置换选择2K16图 2 .1 DES 加密算法21 DES算法原理DES属于分组加密算法,即对固定长度的一组明文进行加密。DES的加密算法如图2.1所示。加密函数有两个输入:明文和密钥。在这里,明文的长度为64bits。密钥的长度为56bits。64bits的明文经过初始置换IP后,用同一个函数进行16次循环变换,最后一个循环的输出左边和右边两个部分经过交换后再通过一个置换IP的逆变换生成了64bits的密文。图2.1的右半部分为密钥的变换。56bits密钥首先通过一个置换函数,接着对于16个循环的每一个,都通过一个循环左移操作和一个置换操作产生出一个子密钥。每一个循环的置换函数相同,由于密钥的重复移位,使产生的子密钥不相同。初始置换及其逆置换1 2 3 4 5 6 7 8 58 50 42 34 26 18 10 2 9 10 11 12 13 14 15 16 60 52 44 36 28 20 12 4 17 18 19 20 21 22 23 24 62 54 46 38 30 22 14 6 25 26 27 28 29 30 31 32 64 56 48 40 32 24 16 8 33 34 35 36 37 38 39 40 57 49 41 33 25 17 9 1 41 42 43 44 45 46 47 48 59 51 43 35 27 19 11 3 49 50 51 52 53 54 55 56 61 53 45 37 29 21 13 5 57 58 59 60 61 62 63 64 63 55 47 39 31 23 15 7图2.2(a)IP置换1 2 3 4 5 6 7 8 40 8 48 16 56 24 64 32 9 10 11 12 13 14 15 16 39 7 47 15 55 23 63 31 17 18 19 20 21 22 23 24 38 6 46 14 54 22 62 30 25 26 27 28 29 30 31 32 37 5 45 13 53 2l 6l 29 33 34 35 36 37 38 39 40 36 4 44 12 52 20 60 28 4l 42 43 44 45 46 47 48 35 3 43 1l 5l 19 59 27 49 50 51 52 53 54 55 56 34 2 42 10 50 18 58 26 57 58 59 60 6l 62 63 64 33 1 41 9 49 17 57 25 图2.2(b)IP逆置换初始置换IP及其逆置换分别如图22(a)和22(b)所示。初始置换及其逆置换的关系为,如果输入64bits 的二进制数经过置换再经过逆置换后,将恢复原先的数值。图22(a)、(b)的关系见表2.1(a)、(b)。表2.1 DES的置换表(a)初始置换585042342618102 60524436282012462544638302214664564840322416857494133251791595143352719113615345372921135635547393123157(b)逆初始置换40848165624643239747155523633138646145422623037545135321612936444125220602835343115119592734242105018582633141949175725 (c)扩展置换3212345456789891011121312131415161716171819202120212223242524252627282928293031321 (d)置换函数1672021291228171152326518311028241432273919133062211425下面分析16个循环的详细过程。图23给出了一个循环的内部结构。先分析图形的左半部分。每个64bits的中间结果的左右两个部分被当成两个独立的32bits数值处理,分别标记为(左)和(右)。输入的长度是32bit。这个输入先被扩展到48bit,扩展操作由表21(c)定义,所得到的48bits再和置换选择2的输出(48bits) 进行异或。得到的48bits结果再经过一个置换函数产生32bits的输出,最后按照表21(d)进行置换。左移位左移位置换(P)表(E)XORS(合)XOR置换选择232bits32bits28bits28bits图2 .3加密算法的轮结构合子作用如图2.4所示。替代由一组共8个盒子完成,其中每一个都接受6个比特作为输入并产生4个比特作为输出。这些变换是由表22定义。表2.2 的使用方法如下:盒子的输入的第一和最后一个比特构成一个2位二进制数,用来选择由表中的行,中间的4个比特则选出列。被上述行和列所选择的单元的十进制数码转换为一个4bits的二进制表示就产生了输出。例如,在7中,对于输入110010,行是10(第2行)而列是1001(第9列)。第2行第9列的数是15,因此输出是1111。S1S8E表R(32bits)48 bitsK(48bits)S2 S3S4S5S6S732 bits图2 . 4 F ( R , K)的计算过程XORP 表2.2 DES的S合的定义 114 4 13 1 2 15 11 8 3 10 6 12 5 9 0 70 15 7 4 14 2 13 1 10 6 12 11 9 5 3 84 1 14 8 13 6 2 11 15 12 9 7 3 10 5 015 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13 215 1 8 14 6 11 3 4 9 7 2 13 12 0 5 10 3 13 4 7 15 2 8 14 12 0 1 10 6 9 11 50 14 7 11 10 4 13 1 5 8 12 6 9 3 2 1513 8 10 1 3 15 4 2 11 6 7 12 0 5 14 9 310 0 9 14 6 3 15 5 1 13 12 7 11 4 2 813 7 0 9 3 4 6 10 2 8 5 14 12 11 15 113 6 4 9 8 15 3 0 11 1 2 12 5 10 14 71 10 13 0 6 9 8 7 4 15 14 3 11 5 2 12 47 13 14 3 0 6 9 10 1 2 8 5 11 12 4 1513 8 11 5 6 15 0 3 4 7 2 12 1 10 14 910 6 9 0 12 11 7 13 15 1 3 14 5 2 8 43 15 0 6 10 1 13 8 9 4 5 11 12 7 2 14 52 12 4 1 7 10 11 6 8 5 3 15 13 0 14 9 14 11 2 12 4 7 13 1 5 0 15 10 3 9 8 64 2 1 11 10 13 7 8 15 9 12 5 6 3 0 1411 8 12 7 1 14 2 13 6 15 0 9 10 4 5 3 612 1 10 15 9 2 6 8 0 13 3 4 14 7 5 1110 15 4 2 7 12 9 5 6 1 13 14 0 11 3 89 14 15 5 2 8 12 3 7 0 4 10 1 13 11 64 3 2 12 9 5 15 10 11 14 1 7 6 0 8 13 74 11 2 14 15 0 8 13 3 12 9 7 5 10 6 1 13 0 11 7 4 9 1 10 14 3 5 12 2 15 8 61 4 11 13 12 3 7 14 10 15 6 8 0 5 9 26 11 13 8 1 4 10 7 9 5 0 15 14 2 3 12 813 12 8 4 6 15 11 1 10 9 3 14 5 0 12 7 1 15 13 8 10 3 7 4 12 5 6 11 0 14 9 27 11 4 1 9 12 14 2 0 6 10 13 15 3 5 82 1 14 7 4 10 8 13 15 12 9 0 3 5 6 11密钥的产生回到图2.1和2.3我们看到56 bit密钥首先经过置换选择1 (表2.3(a),得到的56 bitss被分成两个28 bit的和。在每一个循环中和分别经过一个由左移表2.3(c)确定的1 bit或2 bits的循环左移(或转动),这些经过移位的值再作为下一个循环的输入。它们同时作为置换选择2(表2.3(b)的输入,产生的48bits输出则作为函数的输入。表2.3 密钥置换循环表 (a)置换选择157 494133251791585042342618102595143352719113605244366355473931231576254463830221466153453729211352820124 (b)置换选择21417112415328156211023191242681672720132415231374755304051453348444939563453464250362932 (c)左移表循环序号1 2345678910111213141516左移位数112222221 2 2 2 2 2 21DES的解密 DES解密算法与加密算法完全一样,所不同的是解密子密钥与加密子密钥的使用顺序相反,即子密钥的使用次序要反过来。加解密过程理论验证设明文为,密文为,表示的左边32bits,表示的右边32bits,第i轮变换为,左右交换为,则:, 即, 22 微型DES的设计微型DES原理 IP置换f函数IP置换IP置换f函数IP置换PC1置换循环移位PC2置换加密64bits明文64bis密文64bits密钥解密64bits明文64bits密文48bit子密钥图2.4微型DES算法描述微型DES算法原理如图2.4所示。DES算法是以完整的DES为基础,通过减小其迭代次数,实现其在教学上的应用。该算法以64bit的明文和密钥作为输入,并产生64bit的密文作为输出,由图2.4可知,解密过程与加密过程完全一致。在DES解密多次迭代中,子密钥的使用次序与加密相反,但在微型DES系统中,只有一个密钥,所以是完全一致的。密钥产生原理微型DES的密钥是一个发送方和接收方共享的64bit密钥。而在加密过程中用到的是48bit的子密钥,产生过程如图2.5我们规定了输入的密钥是64比特,但实际参与加密的只有56比特,第8、16、24、32、40、48、56、64位是奇偶校验位,用于检错,也可没有任何意义。因此在密钥方案中不予考虑,也就是说输入56比特进行PC1置换。PC1置换表此处不再赘述。设通过PC1的前28比特为,后28比特为,将和各进行一次循环左移一位,得到新的前28比特和后28比特。和连接在一起,构成56比特。此56比特通过另一个固定置换PC2,该置换使56比特的输入减少到48比特,输出的结果即为子密钥。上述结构的加解密过程完全一致,可用同一软件实现。PC1置换循环左移1位循环左移1位PC2置换28bits28bits64bits密钥56bits48bits子密钥图2.5 微型DES的密钥 密钥产生与加密算法流程图类声明输入明/密文字符串(规定8个字符)调用turn()方法将8个字符转换为表示64bit数组调用PC1()方法实现PC-1置换(64bit到56bit)调用shift left()方法实现前后各28bit的循环左移调用PC2()方法实现PC-2置换得到子密钥(48bit)返回调用该类处48bit子密钥图 2.6子密钥流程图类声明输入明/密文字符串(规定8个字符)调用turn()将8个字符转换为64bit数组调用IP()实现IP置换调E()把置换后的32bit扩展为48bit并与子密钥异或调用Sbox()进行S合运算调用P()方法48bit子密钥图 2.7加、解密算法流程图调用XOR()方法进行异或运算调IPni()进行初始置换的逆置换调ni()进行64bit到8字符转换64返回调该类处23 微型DES密钥生成类的JAVA编程 231 turn ( )方法密钥生成类中turn()方法的设计是这样的:将所输入的字符串分成字符数组,因为直接对字符位操作难以实现置换PC1和PC2,这是因为PC1和PC2几乎没有什么规律,所以将字符转换为字节型的数组,然后直接对比特位进行操作。将字符串转换位用其ASCII码表示的二进制位串数组的设计思路是:首先使用charAt()方法将字符串str转换为8个char数组,再对每一个数组元素chari进行如下操作:依次取出chari的每一位,即将chari依次和下述数相与128(10000000),64(01000000),32(00100000),16(00010000),8(00001000),4(00000100),2(00000010),1(00000001)若所得数值不为0则表示该位为1,其对应的Secratekey数组值为1,否则为零。此后操作为对Secratekey数组的操作。void turn(String str)str2=str; /将字符串str1转换为8元素字符数组char1for(int i=0;i8;i+) char1i=str.charAt(i);/将字符数组char1转换为64位bit数组for(int j=0;j8;j+) for(int i=0;ii;k-) a*=2;/*将int和char型按位与操作&将j行(8个字符)i列(每字符8bit)共64bit展为64元素int数组MingArray替代64位bit型数组*/if(char1j&a)!=0) Secratekeyi+j*8=1;else Secratekeyi+j*8=0; 232 PC1( )方法将PC1置换表存入数组pc1中,例如pc1058表示将第58个比特放在第1个位置,因此只需将(pc1i 1)作为Secratekey数组的下标,直接赋给keyArray 0- keyArray 56即可,用一重循环即可实现,语句精简。之所以pc1i要减1是因为所有的数组是以下标为0的元素作为第一个元素的,而PC1表中以“1”表示第1个比特,“2”表示第2个,二者有所区别,因此需统一。void PC1() for(int i=0;i56;i+) keyArrayi=Secratekeypc1i-1; 233 Shiftleft ( )方法Java中没有循环左移操作符,因此需自编。将keyArray 数组中的56个元素分为两组,记前28个比特为C,后28个比特为D,将C0和D0分别赋给中间变量Temp1和Temp2,此处因C和D都是byte型数组,需对数组进行左移,而不是对数组中某个元素的字符串进行左移,所以不能用操作符“” ,而应用一重循环将Ci+1赋给Ci, Di+1赋给Di,即C0=C1,C1=C2, C26=C27,最后将暂存于Temp1的原C0的值赋给C27,D数组也同理,以此实现了C、D的循环左移。key将左右各28比特连接在一起,构成56比特。void shiftLeft() for(int i=0;i28;i+)Ci=keyArrayi;Di=keyArrayi+28; int Temp1=C0; int Temp2=D0; for(int i=0;i27;i+)Ci=Ci+1;/左移1位Di=Di+1; C27=Temp1;D27=Temp2; for (int i=0;i28;i+)keyi=Ci;keyi+28=Di;/两28合为56位 234 PC2 ( )方法与PC1方法原理相同,输入为表示56比特的key数组,PC2表从56比特中取48比特,输出为48比特的子密钥subkey,此子密钥作为下面加密算法的一个输入。接下的turn()方法编程思路同前,只是前面输入的字符串是密钥,此处的是明文或密文。因为都是8个字符,所以用同一方法即可。输出表示64比特的数组存入MingArray中。void PC2()/56位转换为48位 for (int i=0;i48;i+) subkeyi=keypc2i-1;/生成子密钥subkey 24 微型DES加解密算法的JAVA编程241 IP ( )方法设计思路同PC1(),其输入是代表64比特的MingArray数组,输出是代表64比特的Cipher1数组。void IP()/IPi1变换前下标,i变换后下标,目的从0开始 for(int i=0;i64;i+) Cipher1i=MingArrayIPi-1;242 enlarge ( )方法enlarge()方法是一个带形参的方法,因为它需要类keygenerater()生成的子密钥,只能通过形参来传递。enlarge()方法作用是将Cipher1数组分成两部分,前后各32比特,分别记为L1、R1。再重复使用R1的32比特中的16比特,使其扩展为48比特,记为RE,此48比特再与子密钥subkey异或,结果仍存RE中。void enlarge(int key)/将R1扩展48位与子密钥异或输出REiint suberkey=new int48;for(int i=0;i48;i+) suberkeyi=keyi;for(int i=0;i32;i+)/分解Cipher1 L1i=Cipher1i; R1i=Cipher1i+32; for(int i=0;i48;i+)/ R1Ei-1将R1的32位通过E表扩展48位REi=R1Ei-1;REi=suberkeyi; 243 Sbox ( )方法使用三维数组S,该数组用来存储S盒子表。第一维代表第n个盒子,第二维代表该盒的第m行,第三维代表该盒的第k列。用于循环完成8个盒子同样的操作。挑选出某盒子的某行、某列指定的元素是这样进行的:j表示第j个盒子,即S的第一维,RE数组分为8组,每组六个比特,中间四个比特指定列,即第三维,两边两个比特指定行,即第二维。所选的元素存于Smid中,共8个015之间的数值。下一步将此数值转换为四位二进制表示,所以在Sbox()方法中还有一个重要的转换步骤。根据由十进制数转换为二进制数的除二取余法,将此数除二,所得的余数为最低位,再将商除二,所得的余数为次低位,依此类推。因为1用一位二进制即可表示,2、3用两位,4用三位,8以上用四位。而期望015所有的数均用四位表示,高位不足,用0补齐。设Soutputji为第j个盒子的输出,i表示4位二进制数,将Smid除二取余存于Soutputji中,i是递减的,即表示从低位到高位,再将Smid等于其除二取商的值,将商再除二取余,共循环四次,若商为0则余和下一个商仍为0且保持不变,这就保证了较小数转换时的高位为0且位数为4。void Sbox() for(int j=0;j=0;i-) Soutputji=Smidj%2; Smidj=Smidj/2; 244 P ( )和XOR ( )方法输入为Soutput数组,首先将其按顺序连接为一个一维数组Cipher2,Cipher2表示Sbox输出的32比特,再将其通过P表的置换,即得P()方法的输出Cipher3。Cipher3表示32比特。L2数组是L1与Cipher3按元素异或的结果,R2等于R1,再将L2与R2连接在一起,赋于Cipher4,XOR()方法的输出是64比特。void P() /8行4列32列for(int j=0;j8;j+)for(int i=0;i4;i+) Cipher2j*4+i=Soutputji;for(int i=0;i32;i+)/P表变换Cipher3i=Cipher2Pi-1;void XOR()/P表输出和L1异或for(int i=0;i32;i+)L2i=L1iCipher3i;R2i=R1i;for(int i=0;i32;i+)Cipher4i=L2i;Cipher4i+32=R2i;/单DES轮输出合并 245 Ipni ( )和ni ( )方法64比特位最后经过Ipni()方法,进行比特重排,输出仍为64比特,赋于Cipher5。64比特的密文输出Cipher5需转变为字符,才能从软件中输出,该转换是turn()方法的逆操作。ni()方法是有返回值的方法,返回的就是转换好的字符串。将Cipher5分成8组,每组可转换成一个字符,以Cipher50Cipher57为例,依次将Cipher50Cipher57左移7位、6位、1位、0位,并相或所得8位二进制数即ASCII码,存成char类型。最后将8个字符连接成一个字符串,用String(char)方法输出11。void IPni()for(int i=0;i64;i+) Cipher5i=Cipher4IPnii-1; String ni()/*64bit(063)分j组(8),每j组bit位i表示7i第0bit变为8bit字符最高位,8bit数各位依次()与char2“或”位运算(即8bit相叠加)换为char型数组char2*/for(int j=0;j8;j+)for(int i=0;i8;i+)char2j|=Cipher5i+j*8(7-i); return new String(char2); / 叠加char为String25 微型DES实验指导及JAVA源程序实验指导1、安装JDK1.3。2、 程序取名des.java编译、运行。 3、 将明文security输入方框内(密钥1234ba23程序中已定义)。4、 按加密/解密钮,方框内显示加密后密文$61ria。5、 再按加密/解密钮,方框内显示解密后明文security。(加解密运算使用同一个程序和按钮)。6、 密钥实验:在源程序中将密钥变为1234baa!,编辑、运行。7、 自行实验:定义不同的明文和密钥重复上述过程。实验说明由于本程序编写的是单组DES加密处理程序,因此输入的明文必须为8个字母的英文或符号数字。微型DES的JAVA源程序1(微型DES演示实验用)/ 程序名 : Des.java/ 目的 : 用于JAVA课DES密码演示和实验 / 编写时间: 2004年7月13日import java.awt.*;import java.awt.event.*;public class Des Label a1=new Label(input); Button b1=new Button(加/解密); Button b3=new Button(Exit); TextField t1=new TextField(); dd1 d1=new dd1(); dd3 d3=new dd3(); public static void main(String args) Des g1=new Des(); g1.grun(); void grun( ) a1.setBounds(40,50,50,20); b1.setBounds(new Rectangle(30,85,60,30); b3.setBounds(new Rectangle(210,85,60,30); t1.setBounds(100,50,100,25); Frame ww=new Frame(欢迎使用微型DES实验软件); ww.setLayout(null); ww.add(a1); ww.add(b1); ww.add(b3); ww.add(t1); ww.setBounds(100,100,300,200); ww.show(); b1.addActionListener(d1); b3.addActionListener(d3); class dd1 implements ActionListener public void actionPerformed(ActionEvent e) String x1=; Des2 d2d=new Des2(); /初始化 String ming=t1.getText(); /输入明文 String mi=d2d.des1(ming); /调des1方法产生密文 t1.setText(mi); /display mi class dd3 implements ActionListener public void actionPerformed(ActionEvent e) System.exit(0); class Des2int IP=58,50,42,34,26,18,10,2,60,52,44,36,28,20,12,4,62,54,46,38,30,22,14,6,64,56,48,40,32,24,16,8,57,49,41,33,25,17,9,1,59,51,43,35,27,19,11,3,61,53,45,37,29,21,13,5,63,55,47,39,31,23,15,7;int IPni=40,8,48,16,56,24,64,32,39,7,47,15,55,23,63,31,38,6,46,14,54,22,62,30,37,5,45,13,53,21,61,29,36,4,44,12,52,20,60,28,35,3,43,11,51,19,59,27,34,2,42,10,50,18,58,26,33,1,41,9,49,17,57,25;int E=32,1,2,3,4,5,4,5,6,7,8,9,8,9,10,11,12,13,12,13,14,15,16,17,16,17,18,19,20,21,20,21,22,23,24,25,24,25,26,27,28,29,28,29,30,31,32,1;int P=16,7,20,21,29,12,28,17,1,15,23,26,5,18,31,10,2,8,24,14,32,27,3,9,19,13,30,6,22,11,4,25;int S=14,4,13,1,2,15,11,8,3,10,6,12,5,9,0,7,0,15,7,4,14,2,13,1,10,6,12,11,9,5,3,8,4,1,14,8,13,6,2,11,15,12,9,7,3,10,5,0,15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13,15,1,8,14,6,11,3,4,9,7,2,13,12,0,5,10,3,13,4,7,15,2,8,14,12,0,1,10,6,9,11,5,0,14,7,11,10,4,13,1,5,8,12,6,9,3,2,15,13,8,10,1,3,15,4,2,11,6,7,12,0,5,14,9,10,0,9,14,6,3,15,5,1,13,12,7,11,4,2,8,13,7,0,9,3,4,6,10,2,8,5,14,12,11,15,1,13,6,4,9,8,15,3,0,11,1,2,12,5,10,14,7,1,10,13,0,6,9,8,7,4,15,14,3,11,5,2,12,7,13,14,3,0,6,9,10,1,2,8,5,11,12,4,15,13,8,11,5,6,15,0,3,4,7,2,12,1,10,14,9,10,6,9,0,12,11,7,13,15,1,3,14,5,2,8,4,3,15,0,6,10,1,13,8,9,4,5,11,12,7,2,14,2,12,4,1,7,10,11,6,8,5,3,15,13,0,14,9,14,11,2,12,4,7,13,1,5,0,15,10,3,9,8,6,4,2,1,11,10,13,7,8,15,9,12,5,6,3,0,14,11,8,12,7,1,14,2,13,6,15,0,9,10,4,5,3,12,1,10,15,9,2,6,8,0,13,3,4,14,7,5,11,10,15,4,2,7,12,9,5,6,1,13,14,0,11,3,8,9,14,15,5,2,8,12,3,7,0,4,10,1,13,11,6,4,3,2,12,9,5,15,10,11,14,1,7,6,0,8,13,4,11,2,14,15,0,8,13,3,12,9,7,5,0,6,1,13,0,11,7,4,9,1,10,14,3,5,12,2,15,8,6,1,4,11,13,12,3,7,14,10,15,6,8,0,5,9,2,6,11,13,8,1,4,10,7,9,5,0,15,14,2,3,12,13,2,8,4,6,15,11,1,10,9,3,14,5,0,12,7,1,15,13,8,10,3,7,4,12,5,6,11,0,14,9,2,7,11,4,1,9,12,14,2,0,6,10,13,15,3,5,8,2,1,14,7,4,10,8,13,15,12,9,0,3,5,6,11;String str1;/明文输入,存char1数组为turn输入int MingArray=new int64;/ trun 输出(bit数组)char char1=new char8;/最后ni方法输入Cipher5比特数组,输出char2(char型)char char2=new char8;/* MingArray输出 经IP变换存Cipher1分解L1,R1后经一次迭代算法处理输出L2,R2 */int L1=new int32; int R1=new int32;int R2=new int32; int L2=new int32;int RE=new int48;/R1输出经E表输出RE为S合输入int Smid=new int 8; /S合中间结果暂存int Soutput=new int84; /S合输出/* Soutput 经变化得Cipher2(P变换3,P与LXOR后4,IPni后5)*/int Cipher1=new int64;int Cipher2=new int32;int Cipher3=new int32;int Cipher4=new int64;int Cipher5=new int64;void turn(String str)str1 = str;for(int i=0;i8;i+) char1i=str1.charAt(i);for(int j=0;j8;j+) for(int i=0;ii;k-) a*=2; if(char1j&a)!=0) MingArrayi+j*8=1; else MingArrayi+j*8=0; void IP() for(int i=0;i64;i+) Cipher1i=MingArrayIPi-1;void enlarge(int key) int suberkey=new int48; for(int i=0;i48;i+) suberkeyi=keyi; for(int i=0;i32;i+) L1i=Cipher1i; R1i=Cipher1i+32; for(int i=0;i48;i+)REi=R1Ei-1;REi=suberkeyi; void Sbox() for(int j=0;j=0;i-) Soutputji=Smidj%2; Smidj=Smidj/2; void P() for(int j=0;j8;j+)for(int i=0;i4;i+) Cipher2j*4+i=Soutputji;for(int i=0;i32;i+) Cipher3i=Cipher2Pi-1;v
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 校园防盗抢安全知识培训课件
- 法语面试题目答案
- 培训考试测试题及答案
- 教育宣传考试题及答案
- 校园安全知识培训课件的困惑
- java面试题及答案ip段地名
- 沈海高速考试试题及答案
- 货币自考试题及答案
- 猪场检疫面试题及答案
- 导诊文员笔试题及答案
- 云南省昆明市嵩明县2023-2024学年高一下学期期中数学试卷
- NB-T20024-2010核电厂工程建设预算编制方法
- BBT 0024-2018 运输包装用拉伸缠绕膜
- HYT 0302-2021 沸石离子筛法海水提钾工程设计规范(正式版)
- 外祖父母外孙子外孙女关系证明
- DL∕T 2473.7-2022 可调节负荷并网运行与控制技术规范 第7部分:继电保护
- 2021修订《城市规划设计计费指导意见》
- 道德与法治新课标解读
- 《光伏发电工程工程量清单计价规范》
- 《国家心力衰竭指南-2023》解读
- 解剖型胫骨髓内钉培训课件
评论
0/150
提交评论