ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:31.75KB ,
资源ID:22940031      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/22940031.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(DES加密解密算法Word格式文档下载.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

DES加密解密算法Word格式文档下载.docx

1、0x07 0x80 0x80 0x80 0x80 0x80 0x80 0x80。再比如最后一块为7字节,那么填充的数据就为:0x00。在这些准备工作之后,方可对数据进行加密。在解密的时候,还要完成将填充的数据去掉,恢复以前输入的明文。3.DES的工作方式 3.1电子密码本模式(ECB)这种模式是最早采用和最简单的模式,它将加密的数据分成若干组,每组的大小跟加密密钥长度相同,然后每组都用相同的密钥进行加密。一个64位的密钥,如果采用该模式加密,就是将要加密的数据分成每组64位的数据,如果最后一组不够64位,那么就补齐为64位,然后每组数据都采用DES算法的64位密钥进行加密。3.2 加密块链模式

2、(CBC)CBC模式的加密首先也是将明文分成固定长度,(64位)的块,(P0P1.),然后将前面一个加密块输出的密文与下一个要加密的明文块进行XOR(异或)操作计算,将计算结果再用密钥进行加密得到密文。第一明文块加密的时候,因为前面没有加密的密文,所以需要一个初始化向量(IV)。跟ECB方式不一样,通过连接关系,使得密文跟明文不再是一一对应的关系,破解起来更困难,而且克服了只要简单调换密文块可能达到目的的攻击。但是该加密模式的缺点是不能实时解密,也就是说,必须等到每8个字节都接受到之后才能开始加密,否则就不能得到正确的结果。这在要求实时性比较高的时候就显得不合适了。3.3加密反馈模式(CFB)

3、 加密反馈模式(CFB)为了克服必须等待8个字节全部得到才能进行解密的缺点,采用了一个64位,(8个字节)的位移寄存器来获得密文。所以能够实现字符的实时加密和解密,不用再等到8个字节都接受到之后再进行解密。其他特性和CBC差不多。4.DES核心代码4.1加密解密函数 public byte DesEncrypt(byte des_data, int flag) byte format_key = ByteDataFormat(bytekey, flag); byte format_data = ByteDataFormat(des_data, flag); int datalen = form

4、at_data.length; int unitcount = datalen / 8; byte result_data = new bytedatalen; for (int i = 0; i = 1) & (delete_len = 8) ? delete_len : 0; decryptbytearray = new bytetotal_len - delete_len - 8; boolean del_flag = true; for (int k = 0; k delete_len; k+) if (delete_len != result_datatotal_len - 8 -

5、(k + 1) del_flag = false; if (del_flag = true) System.arraycopy(result_data, 0, decryptbytearray, 0, total_len- delete_len - 8); return (flag = 1) ? result_data : decryptbytearray; 5测试结果主界面:加密解密:6总结在做课程设计的过程中,我学会不少东西。大大提高了自己的编程能力和动手能力。与此同时,在这次的课程设计中我也看到了自己所存在的不足之处,通过这次课程设计,我更加系统的掌握了DES加密解密的过程及其原理,DE

6、S加密算法加密效率高,安全性强的相关原理,为以后的学习打下坚实的基础,同时也让我认识到了自己的很多不足,这就在客观上要求自己在以后的学习过程中要更加努力。参考文献1张建 密码学原理及应用技术 清华大学出版社2 张仕 应用密码学 西安电子科技大学出版社3 杨波 现代密码学清华大学出版社完整代码:package 密码学;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class DES byte bytekey; public DES(String st

7、rKey) this.bytekey = strKey.getBytes(); / 声明常量字节数组 private static final int 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,

8、 55, 47, 39, 31, 23, 15, 7 ; / 64 private static final int IP_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,

9、 17, 57, 25 ; private static final int PC_1 = 57, 49, 41, 33, 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 ; / 56 private static final int PC_2 =

10、14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10, 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2, 41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32 ; / 48 private static final 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

11、, 16, 17, 18, 19, 20, 21, 20, 21, 22, 23, 24, 25, 24, 25, 26, 27, 28, 29, 28, 29, 30, 31, 32, 1 ; private static final 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 ; / 32 private static final int S_Box = /S-盒 / S_Box1 1

12、4, 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 , / S_Box2 15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10 , 3, 13, 4, 7, 15,

13、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 , / S_Box3 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,

14、2, 12, 5, 10, 14, 7 , 1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12 , / S_Box4 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,

15、 14 , / S_Box5 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 , / S_Box6 12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11 , 1

16、0, 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 , / S_Box7 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,

17、 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 , / S_Box8 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

18、, 9, 0, 3, 5, 6, 11 ; private static final int LeftMove = 1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2,2, 2, 2, 1 ;/ 左移位置列表 private byte UnitDes(byte des_key, byte des_data, int flag) / 检测输入参数格式是否正确,错误直接返回空值(null) if (des_key.length != 8) | (des_data.length != 8)| (flag ! (flag != 0) throw new RuntimeExceptio

19、n(Data Format Error !); int flags = flag;/ 二进制加密密钥 int keydata = new int64;/ 二进制加密数据 int encryptdata = new int64; / 加密操作完成后的字节数组 byte EncryptCode = new byte8;/ 密钥初试化成二维数组 int KeyArray = new int1648;/ 将密钥字节数组转换成二进制字节数组 keydata = ReadDataToBirnaryIntArray(des_key);/ 将加密数据字节数组转换成二进制字节数组 encryptdata = R

20、eadDataToBirnaryIntArray(des_data);/ 初试化密钥为二维密钥数组 KeyInitialize(keydata, KeyArray); / 执行加密解密操作 EncryptCode = Encrypt(encryptdata, flags, KeyArray); return EncryptCode; / 初试化密钥数组 private void KeyInitialize(int key, int keyarray) int i; int j; int K0 = new int56;/ 特别注意:xxxIPi-1等类似变换 for (i = 0; 56; K0

21、i = keyPC_1i - 1; / 密钥进行PC-1变换 16; LeftBitMove(K0, LeftMovei); / 特别注意: for (j = 0; j -1; i-) MIP_1i = MIP_1i - 1; / 进行IP-1运算 GetEncryptResultOfByteArray(MIP_1, encrypt);/ 返回加密数据 return encrypt; private int ReadDataToBirnaryIntArray(byte intdata) / 将数据转换为二进制数,存储到数组 int IntDa = new int8; 8; IntDai = intdatai; if (IntDai 0) IntDai += 256; IntDai %= 256; int IntVa = new int64; IntVa(i * 8) + 7) - j = IntDai % 2; IntDai = IntDai / 2; return IntVa; private void LeftBitMove(int k, int offset) / 循环移位操作函数 int c0 = new int28; int d0 = new int28; int

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1