基于c的文档加密器的实现—免费计算机毕业设计论文内容摘要:

, R0 则是换位输出后的两部分, L0 是输出的左 32 位, R0 是右 32位。 例:设置换前 的输入值为 D1D2D3„D64 ,则经过初始置换后的结果为:L0=D58D50„D8 ; R0=D57D49„7。 ( 2) 逆置换 经过 16次迭代运算后,得到 L16, R16,将此作为输入进行逆置换,即得到密文输出。 逆置换正好是初始置换的逆运算。 例如,第 1 位经过初始置换后,处于第 40位,而通过逆置 换,又将第 40位换回到第 1位,其逆置换的规则如表 2所示。 表 2逆置换 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 ( 1) 函数 f(Ri, Ki)的计算 其算法描述如图 1所示。 图 1 算法描述 在图 1中, “ 扩展置换 ” 是将 32 位放大成 48位, “P 盒置换 ” 是 32位到 32 位换位,其换位 规则分别 如表 表 4所示。 表 3扩展置换表 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 表 4 P盒置换表 16, 7, 20, 21, 29, 12, 28, 17, 1, 15, 23, 16, 23, 26, 5, 18, 31, 10, 2, 8, 24, 14, 32, 27, 3, 9, 19, 13 , 30, 6, 22, 11, 4, 25 在( Ri, Ki) 算法描述图中, S1, S2, „ , S8 为选择函数,其功能是把 6 b 数 据变为 4 b 数据。 下面以选择函数 S1 为例说明其功能。 其选择函数 S1的功能表如表 5 所 示。 表 5选择函数 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 通过表 5 可以看到,在 S1 中共有 4 行数据,分别命名为 0, 1, 2, 3 行,每行有16列,分 别命名为 0, 1, 2, 3, „ , 14, 15 列。 现设输入为: D=D1D2D3D4D5D6 令:列 =D2D3D4D5,行 =D1D6 然后在 S1 表中查得对应的数,以 4位二进制表示,此即为选择函数 S1 的输出。 (4)子密钥 Ki(48 b)的生成算法 开始,由于不考虑每个字节的第 8 位, DES 的密钥从 64位变为 48 位,如表 6所示,首先 56 位 密钥被分成两个部分,每部分 28 位,然后根据轮数,两部分分别循环左移l或 2位。 表 6 密钥置换 57, 49, 41, 32, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36, 63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4 DES 算法规定,其中第 8, 16, „ , 64 位是奇偶校验位,不参与 DES 运算。 故 Key实际可用 位数只有 56 位。 即:经过密钥置换表的变换后, Key 的位数由 64 位变成了56 位,此 56 位分为 C 0, D0 两部分,各 28 位,然后分别进行第一次循环左移,得到C1, D1,将 C1(28 位 ), D1(28 位 )合并得到 56 位,再经过压缩置换,从而便得到了密钥 K0(48 位 )。 依次类推,便可得到 K1, K 2, „ , K15。 需要注意的是, 16 次循环左移对应的左移位数要依据表 7所示的规则进行。 以上介绍了 DES 算法的加密过程。 DES 算法的解密过程是一样的,区别仅在于第一次迭代 时用子密钥 K15,第二次是 K14, „ ,最后一次用 K0,算法本 身并没有任何变化。 表 7循环左移位数 轮 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 位数 1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2 , 2, 2, 1 算法的编程实现 (一) int des(char *data, char *key, int readlen) 参数 : (长度为 readlen, 可能经过填充。 (8 字节的倍数 ) 功能 : 生成加密密钥 , 把待加密的明文数据分割成 64 位的块 , 逐块完成 16次迭代加密 ,密文存放 data 所指向的内存中。 (二) int Ddes(char *data, char *key, int readlen) 参数 : (长度为 readlen, 可能经过填充。 ( 8 字节的倍数 ) 功能 : 生成解密密钥 , 把待解密文分割成 64 位的块 , 逐块完成 16次迭代解密 , 解密后的明文存放在 data 所指向的内存中。 (三) int des3(char *data, char *key, int n , int readlen) 参数 : (长度为 readlen, 可能经过填充。 (8 字节的倍数 ) 功能 : 生成加密密钥 , 把待加密的明文分割成 64 位的块 , 把第 i1 层加密后的密文作为第 i 层 的明文输入 , 根据用户指定的加密层数进行 n 层加密 , 最终生成的密文存放在data 所指向 内存中。 说明 : 用户仅仅输入一条密钥 , 所有的加密密钥都是由这条密钥生成 . (四) int Ddes3(char *data, char*key, int n , int readlen) 参数 : (长度为 readlen, 可能经过填充。 (8 字节的倍数 ) 功能 : 生成解密密钥 , 把待解密文分割成 64 位的块 , 把第 i1 层解密后的 明文 作为第i层解密 密文输入 , 根据用户指定的解密层数进行 n层解密 , 最终生成的明文存放在 data所指向 内存中。 说明 : 用户仅仅输入一条密钥 , 所有的解密密钥都是由这条密钥生成 . (五) int desN(char*data, char*key, int n_key, int readlen) 参数 : (长度为 readlen, 可能经过填充。 (8 字节的倍数 ) 功能 : 生成加密密钥 , 把待加密的明文分割成 64 位的块 , 把第 i1 层加密后的密文作为第 i 层加密的明文输入 , 根据用户指定的加密层数进行 n 层加密 , 最终生成的密文存放在 data 所指向的内存中。 说明 : 这里用户通过输入的密钥条数决 定加密的层数 , 每轮 16 次迭代加密所使用的加密密钥是由用户自定的对应密钥生成。 (六) int DdesN(char *data, char *key, int n_key, int readlen) 参数 : (长度为 readlen, 可能经过填充。 (8 字节的倍数 ) 功能 : 生成解密密钥 , 把待解密文分割成 64 位的块 , 把第 i1 层解密后的”明文”作为第 i 层解 的密文输入 , 根据用户指定的解密层数进行 n层解密 , 最终生成 的明文存放在data 所指向的内存中。 说明 : 这里用户通过输入的密钥条数决定解密的层数 , 每轮 16 次迭代加密所使用的解密密钥是由用户自定的对应。 DES 算法的应用误区及避开方法 DES 算法具有极高的安全性,到目前为止,除了用穷举搜索法对 DES 算法进行攻击外,还没有发现更有效的办法。 而 56 位长的密钥的穷举空间为 256,这意味着如果一台计算机的速度 是每秒检测一百万个密钥,则他搜索完全部密钥就需要将近 2 285 年的时间,可见这是难以实现的。 当然,随着科学技术的发展,当出现超高速计算机后,可以考虑把 DES 密 钥的长度再增长一些,以此来达到更高的保密程度。 由上述 DES 算法介绍可以看到, DES 算法中只用到 64 位密钥中的其中 56位,而第8, 16, 24, „ , 64 位 8个位并未参与 DES 运算,这一点,提出了一个应用上的要求,即 DES 的安全性是基于除了 8, 16, 24, „ , 64 位外的其余 56位的组合变化才得以保证的。 因此 ,在实际应用中,应避开使用第 8, 16, 24, „ , 64 位作为 DES 密钥的有效数据位,才能保 证 DES 算法安全可靠。 对运用 DES 来达到保密作用的系统产生数据被破译的危险,这正是 DES 算法在应用上的误区。 避开 DES算法应用误区的具体操作:在 DES 密钥 Key 的使用、管理及密钥更换的过程中,应 绝 对避开 DES 算法的应用误区,即绝对不能把 Key 的第 8, 16, 24, „ , 64位作为有效数据位 来对 Key 进行管理,这一点,对应用 DES 加密的用户来说要高度重视。 有些网络, 利用定期更换 DES 密钥 Key 的办法来进一步提高系统的安全性和可靠性,如果忽略了上述应用 误区,那么,更换新密钥将是徒劳的,对网络的安全运行将十分危险,所以更换密钥一 定要保证新 Key 与旧 Key 真正的不同,即除了第 8, 16,24, „ , 64位以外其他位 数据发生 了变化,这一点是非常重要的。 目前 加密算法 已被广泛的应用,随着信息化和数字化社会的发展,随着计算机Inter 的普及,密码学必将在国家安全、经济交流、网络安全及人民生活等方面发挥更大作用。 3 软件设计与实现 本软件设计和实现的功能主要有两个方面,一是对文件的加密,二是对加密的文件的解密工作。 还附带了用户自己设定文件密码,密码验证和各个操作的正确性的提示。 所以将加密器分为 2 个子模块: 1 文件加密, 2 文件解密。 加密功能待完成网络方面数据流加密 节点加密和节点解密。 对数据打包封装在网络上进行密文传 输。 局部文本加密替换功能 也是一个研究的方面。 密钥的分配和更改需要通过必要的渠道进行传输,密钥的管理也关系到整个加密文件的安全因数。 程序结构图 图 2 程序结构图 关键代码的设计 为 加密控件 按钮添加事件处理程序,这段程序的功能是将选定的文件加密 , 获得待加密文件名 、 获得保存文件名 、 创建文件流分别指向输入和输出文件 , 根据密码算出密钥并保存到选定的文件中去,代码如下 : private void encode_Click(object sender, EventArgs e) {//获得待加密文件名 string inName =。 //获得保存文件名 string outName =。 byte[] desIV = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 }。 byte[] desKey ={ }。 //根据密码算出密钥 string keyString =。 if ( = 8) { DES 加密 文档 加密 文档 解密 选择加密对话框 选择保存对话框 设置密码 确认密码 选择加密。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。