辽宁快乐12直选:the5fire的技术博客

彩票开奖查询 www.8a72.cn 关注Python、Django、Vim、Linux、Web开发、团队管理和互联网--Life is short, we need Python.


使用java实现真实数据DES加密(java源代码)

作者:the5fire | 标签:             | 发布:2010-11-23 11:30 p.m. | 阅读量: 8581, 8459
在前面那篇文章《使用DES实现真实数据加密的前奏(分析)》分析的基础上,用java实现了可以对字符串进行加密,不过遗留的问题是不能对字符串进行解密,因为在把加密后的字节型数组转为字符串之后再转回来就和原先的字节型数组不一样了,会少许多位,不知道这是为什么。莫非字节型数组和字符串不是一对一转换的吗?很迷惑

desReal

具体实现大家可以先看这个图,这里面主要添加了两个类,DESPre和DESControl。DESPre主要是实现了前一篇文章中说到的基本操作,比如byte数组转成二进制数组,等。DESControl主要是用来操作DES类(核心算法类)和DESPre(预处理类),可以算得上是一个流程控制类吧。

下面给出DESControl类的代码,其他代码我最后给出链接。


package mydes;


/**
* DES控制类,主要是封装DES核心和DES与处理类,留给前台良好借口
* @author 胡阳
* blog://www.8a72.cn
* 版权声明:转载请保留源码完整信息
*/
public class DESControl {

/**
* 预处理操作类
*/
private DESPre desPre = new DESPre();

/**
* DES核心算法类
*/
private DES des = new DES();

private int[] K = null;

public DESControl() {

}

/**
* 传入密钥
* @param keyText
*/
public DESControl(String keyText) {
byte[] key = desPre.dataformat(keyText.getBytes());
K = desPre.convertBinary(key);
}

/**
* 加密:传入明文进行加密得到结果以字节型数组形式返回
* @param plainText
* @return
*/
public byte[] DesEntrypt(String plainText) {
byte[] mText = null;
int[] M = null;
byte[] result = null;//用来存储加密后的结果

//1.首先对其预处理
//转换成byte数组
mText = desPre.dataformat(plainText.getBytes());

int datalen = mText.length;
int unitcount = datalen / 8;

//将byte转换为二进制
M = desPre.convertBinary(mText);

//根据转换好的明文,实例化result
result = new byte[M.length / 8];

//2.分组进行加密
for (int i = 0; i < unitcount; i++) {
int[] tmpkey = new int[64];
int[] tmpdata = new int[64];

System.arraycopy(K, 0, tmpkey, 0, 64);
System.arraycopy(M, i * 64, tmpdata, 0, 64);

int[] tmpC = des.encrypt(tmpdata, tmpkey);
byte[] tmpResult = desPre.convertBytes(tmpC);
System.arraycopy(tmpResult, 0, result, i * 8, 8);
}

return result;
}

/**
* 解密:传入加密后的字节数组,解密后以字节数组的形式返回
* @param cText
* @return
*/
public byte[] DesDecryption(byte[] cText) {

int[] C = desPre.convertBinary(cText);

int datalen = cText.length;
int unitcount = datalen / 8;

//根据转换好的明文,实例化result
byte[] result = new byte[C.length / 8];

for (int i = 0; i < unitcount; i++) {
int[] tmpkey = new int[64];
int[] tmpdata = new int[64];

System.arraycopy(K, 0, tmpkey, 0, 64);
System.arraycopy(C, i * 64, tmpdata, 0, 64);

int[] tmpC = des.decryption(tmpdata, tmpkey);
byte[] tmpResult = desPre.convertBytes(tmpC);
System.arraycopy(tmpResult, 0, result, i * 8, 8);
}
byte[] tmpR = desPre.removeExpand(result);//消除扩展位

return tmpR;
}
}


实现过程中参照了几个网上的源代码,很感谢那些乐于分享的人。

源代码地址:https://github.com/the5fire/DESPro

整个代码编写还是在eclipse中进行的,打包的也是一个eclipse工程。

如果这里看不明白记得先去看前面的基础文章 - from www.8a72.cn
----EOF-----

微信公众号:Python程序员杂谈



其他分类:
  • 大众迈特威悠享版上市 国内限量260台 2019-06-16
  • 省国资运营公司机关召开党员大会选举产生第一届机关党委委员 2019-06-16
  • 本论坛上有位网名为“第十阶层1”的网友,你可问问他“阶层”与“阶级”有什么区别!呵呵! 2019-06-13
  • 国际在线:向世界报道中国,向中国报道世界 2019-06-06
  • 【理上网来喜迎十九大】美国丹佛大学孙晶:中国是世界“平稳的基石” 2019-06-06
  • 【清园20年】感恩大回馈!半价!半价! 2019-05-30
  • 詹姆斯不太可能加盟凯尔特人,但绿衫军将保持活跃 2019-05-30
  • 《中国海归人才吸引力》报告发布:“海外抢人大战”升温 2019-05-30
  • 黄河发源地青海“多管齐下”确保“一江清水向东流” 2019-05-28
  • 央视解读不动产登记体系全面运行 房价会下跌 2019-05-28
  • 关注改革最后一公里:湖北纪检等部门用新技术整合分散信息 2019-05-27
  • 中国三大球备战里约奥运 2019-05-27
  • “让劳动理念深入人心” 2019-05-25
  • 小米收购其韩国总代 在三星“后花园”落地 2019-05-24
  • 这个辅警,是朋友圈最能“吹”的人! 2019-05-24
  • 746| 815| 794| 466| 778| 350| 386| 24| 863| 194|