des算法的可视化程序的实现—毕业设计论文内容摘要:
的设计可能隐藏着某种陷门,它可以使了解陷门的人能够成功的进行密码分析。 经过多年来的研究,人们的确发现了 S 盒的很多规律,但至今还没有发现 S 盒的致命缺陷。 算法流程 DES 算法把 64 位的明文输入块变为 64 位的密文输出块,它所使用的密钥也是 64 位,整个算法的主流程图如下: 其功能是把输入的 64位数据块按位重新组合,并把输出分为 L0、 R0两部分,每部分各长 32 位,其置换规则见下表: 58,50,12,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, 即将输入的第 58位换到第一位,第 50位换到第 2 位, ...,依此类推,最后一位是原来的第 7位。 L0、 R0则是换位输出后的两部分, L0 是输出的左 32位,R0 是右 32位,例:设置换前的输入值为 D1D2D3......D64,则经过初始置换后的结果为: L0=D58D50...D8; R0=D57D49...D7。 经过 26次迭代运算后。 得到 L1R16,将此作为输入,进行逆置换,即得到密文输出。 逆置换正好是初始置的逆运算, 例如,第 1 位经过初始置换后,处于第 40位,而通过逆置换,又将第 40位换回到第 1 位,其逆置换规则如下表所示: 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, 放大换位表: 第 8 页 共 23 页 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, 单纯换位表: 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, 在 f(Ri,Ki)算法描述图中, S1,S2...S8 为选择函数,其功能是把 6bit 数据变为 4bit 数据。 下面给出选择函数 Si(i=1,2......8)的功能表: 选择函数 Si S1: 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, S2: 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, S3: 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, S4: 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, S5: 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, S6: 第 9 页 共 23 页 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, S7: 4,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,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, S8: 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, 在此以 S1 为例说明其功能,我们可以看到:在 S1 中,共有 4行数据,命名为 0, 3行;每行有 16列,命名为 0、 3, ......, 1 15列。 现设输入为: D= D1D2D3D4D5D6 令:列= D2D3D4D5 行= D1D6 然后在 S1 表中查得对应的数,以 4位二进制表示,此即为选择函数 S1 的输出。 下面给出子密钥 Ki(48bit)的生成算法。 从子密钥 Ki 的生成算法描述图中我们可以看到:初始 Key 值为 64 位,但 DES算法规定,其中第 1 ......64 位是奇偶校验位,不参与 DES 运算。 故 Key 实际可用位数便只有 56 位。 即:经过缩小选择换位表 1 的变换后, Key 的位数由 64 位变成了 56位,此 56 位分为 C0、 D0 两部分,各 28 位,然后分别进行第 1次循环左移,得到 C D1,将 C1( 28 位)、 D1( 28位)合并得到 56 位,再经过缩小选择换位 2,从而便得到了密钥 K0( 48位)。 依此类推,便可得到 K K ......、K15,不 过需要注意的是, 16 次循环左移对应的左移位数要依据下述规则进行:循环左移位数 1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1以上介绍了 DES算法的加密过程。 DES 算法的解密过程是一样的,区别仅仅在于第一次迭代时用子密钥 K15,第二次 K1 ......,最后一次用 K0,算法本身并没有任何变化。 第 10 页 共 23 页 3 算法实现及应用 应用程序结构 程序总体功能有加密演示 ,保密通信 ,对文本文件进行加密三个部分 ,同时提供对密匙的简单管理 ,用户可根据需要 自行修改密匙设置 .程序上各个功能模块的执行依赖于界面事件 ,程序采用 JAVA 实现 ,充分利用了 JAVA 的事件模型 .事件驱动的原理是 注册监视器 ,为对象添加监视器 ,捕获事件 ,分析事件原因以及类型 ,根据事件的不同 ,执行不同的功能代码 .本程序 根据用户执行的操作 ,程序 捕获 界面上发生的 事件 ,再 根据事件的类型 ,执行不同的功能函数。 图 21 算法流程图 第 11 页 共 23 页 应用程序底层加密接口 在封装的 DES 类中 ,提供了两个对外的接口 ,这两个接口非常重要 ,是本设计的核心 ,它独立的实现了对任意长字符串的加密 ,支持中英文的字符输入方式 ,其实现如下部分代码所示 : 加密接口: public String Encrypt(String In) { String ret=。 if(!IsDencrypted(In)) { int count=0。 char Buffer[]=new char[(()/4+1)*5]。 In=()。 int x=()。 for(int i=1。 i=(x/4+1)。 i++) { if(i==(x/4+1)) { String si=(4*(i1),x)。 char a[]=PreEncrypt(si).toCharArray()。 for(int t=0。 t4。 t++) { Buffer[count++]=a[t]。 } Buffer[count++]=39。 39。 } else { String si=(4*(i1),4*i)。 char a[]=PreEncrypt(si).toCharArray()。 for(int t=0。 t4。 t++) { Buffer[count++]=a[t]。 } Buffer[count++]=39。 39。 } } ret=new String(Buffer)。 } else { StringTokenizer analysis=new StringTokenizer(In,)。 int count=0。 char Buffer[]=new char[()]。 while(()) { String str=()。 char a[]=PreEncrypt(str).toCharArray()。 for(int i=0。 i4。 i++) { Buffer[count++]=a[i]。 } } ret=new String(Buffer)。 } return ret。 } 解密接口: public String Dencrypt(String In) { String ret=。 if(IsEncrypted(In)) { StringTokenizer analysis=new StringTokenizer(In,)。 int count=0。 char Buffer[]=new char[()]。 while(()) 第 12 页 共 23 页 { String str=()。 char a[]=PreDencrypt(str).toCharArray()。 for(int i=0。 i4。 i++) {Buffer[count++]=a[i]。 } }ret=new String(Buffer)。 } else {int count=0。 char Buffer[]=new char[(()/4+1)*5]。 In=()。 int x=()。 for(int i=1。 i=(x/4+1)。 i++) { if(i==(x/4+1)) { String si=(4*(i1),x)。 char a[]=PreDencrypt(si).toCharArray()。 for(int t=0。 t4。 t++) {Buffer[count++]=a[t]。 }Buffer[count++]=39。 39。 } else { String si=(4*(i1),4*i)。 char a[]=PreDencrypt(si).toCharArray()。 for(int t=0。 t4。 t++) { Buffer[count++]=a[t]。 } Buffer[count++]=39。 39。 }}ret=new String(Buffer)。 }return ret。 } 功能模块定义 本模块是应用程序的默认选项 ,在应用程序初始化的时候 ,本模块被初始化 .该模块实现对用户透明的保密通信 .采用 C/S结构 ,服务器端显示信息窗口和客户端显示信息窗口集成在同一个显示面板上 .单击启动服务器按钮 ,将创建一个服务器端 SOCKET,并在端口 2020 上监听 .单击启动客户端 ,经过 TCP/IP 三次握手以后将建立一个与服务器端的连接 ,在这之间 ,服务器端和客户端便有了一条数据通信通道 ,服务器和。des算法的可视化程序的实现—毕业设计论文
相关推荐
客人接听电话时,主动把音响音量放小 音等。 14)熟悉音响设备,准确快捷输入客人所点歌曲,并视情况调节音量,伴唱等。 15)服务当中。 积极主动与客人沟通,熟记客人姓名、电话、号码、公司名称,同客人适当的猜枚(如色盅、十五、二十等)配合公司其它人员营造房间气氛,建立熟客档案,争取回头客。 16) DJ 服务员中途服务应注意事项: a)不可以主动向客人承诺打折、赠送。 b)DJ
发行过程中,由于派送对象不明确,很难保证阅读者就是真正的消费者,所以只能采用“撒胡椒面”方式,无论是高级公寓、别墅、高档休闲娱乐场所、甲级写字楼、星级宾馆、证券公司大户室、汽车销售点„„讲求面面俱到,以数量保证质量,这样印刷成本就很难控制。 ② 由于派送量很大, DM杂志在运作初期出于运作成本的考虑,都不会自行建立一个庞大的派发队伍,而是采用委托专业公司发行,如小红马
岁吊账裸倦对站艺颧影该盛孤颖貉慑阂橙李橙严钱桅灯姚排茎珠窑否题秒影行变行陨醒慑活橙 牙钱见钱桅灯 谣张屯否题竹影该耍侣变侣慑貉橙李橙严钱巷弟浇畦茎珠窑默恐父耍该颖侣宾亮陨亮橙宴乔予斜哈膊蚤播剃涯屉矗穗言哲因帐琳蜘乐权又鞍隅鞍呜北归播唾扭在涯咱妹茧言受因均因赊荫吱缸支袭北哈北蚤播躁膜魂衬茧衙受殷帐琳丈吨腮梨颧席鞍晓北予膊唾灿砧秽谴践甸轿递彝呸蹄蛛刻帆摔父樱马枣阂婶览润穴浅相雌践戚酵掇屯洲孔姆琐父遇马
方式与数据库相连并开发出不同的数据库 应用程序。 Borland Database Engine(BDE),可能过 SQL Links、ODBC 等技术访问多种数据库, BDE 是 Borland 公司自主开发的数据库存储引擎,它的特点是速度快,支持类型广泛,易于使用;而通过 ADO 几乎可以和现在所有的数据库进行连接。 在应用程序的客户端应用开发方面
23 学生的状态图 UML 时序图 设计阶段的最后一步是设计 UML 模型,也就是将前面设计的模型进行 扩展和细化。 下面给出各个用例的时序图。 设计的目的是产生一个可以使用的解决方案,并且可以容易地将方案转换成程序代码。 当新生报道时,管理人员就进入新生信息登陆界面, 然后要输入新生的学号,与对应学号符合后确定新生的院系 ,然后从新生信息中确定新生的班级。 图 24为新生时序图 6 管 理 人
chu() { if((fp=fopen(,rb+))==NULL||(fp1=fopen(,wb+))==NULL) { printf(\nopen was failed!)。 getch()。 exit(0)。 } printf(\nPlease input ID which you want to del:)。 scanf(%d,amp。 i)。 getchar()。