辽宁号航空母舰多少钱: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. | 阅读量: 8421, 8302
在前面那篇文章《使用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程序员杂谈



其他分类:
  • 坐观光巴士 小小代言人带你游广州 2019-04-15
  • 习近平为传统文化“代言” 2019-04-12
  • 这位游客骨骼清奇送你一份小长假游新疆攻略 2019-04-12
  • 5月济南房价走势如何?济南热门楼盘报价一览 ——凤凰网房产济南 2019-04-05
  • 默克尔政权要崩?联盟党闹分裂内政部长威胁“单飞” 2019-04-04
  • 孕妇也要喝奶粉?孕妇奶粉该不该喝要因人而异 2019-03-31
  • 5月份全国首套房贷款利率上涨至5.60% 2019-03-31
  • 新形势下如何做好社区党支部工作 2019-03-27
  • 国际足联成员也就是亚足联成员的中国(大陆)、朝鲜、中华台北、香港、澳门,也可以有蒙古,可联合申办2038年世界杯。其中,中国大陆、朝鲜,算东道主,直接参赛。 2019-03-27
  • 贵州省委常委赵德明任贵阳市委书记(图简历) 2019-03-25
  • 学习贯彻党的十九大精神中央宣讲团宣讲活动综述 2019-03-25
  • 鹿晗全新Remix专辑《Re:Play》发布 首支单曲全球上线鹿晗 专辑 2019-03-21
  • 【奋斗吧2018】风电检修工——荒原上的“听风者” 2019-03-21
  • 世界杯还可以这样看 日媒:中国AI产品抢眼亚洲电子展} 2019-02-27
  • 特朗普下令美国防部组建第六军种“太空军” 2019-02-17
  • 919| 444| 713| 206| 835| 795| 955| 814| 47| 871|