具体实现大家可以先看这个图,这里面主要添加了两个类,DESPre和DESControl。DESPre主要是实现了前一篇文章中说到的基本操作,比如byte数组转成二进制数组,等。DESControl主要是用来操作DES类(核心算法类)和DESPre(预处理类),可以算得上是一个流程控制类吧。
下面给出DESControl类的代码,其他代码我最后给出链接。
package mydes;
/**
* DES控制类,主要是封装DES核心和DES与处理类,留给前台良好借口
* @author 胡阳
* blog:http://www.the5fire.com
* 版权声明:转载请保留源码完整信息
*/
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 the5fire.com
----EOF-----
微信公众号:Python程序员杂谈
微信公众号:Python程序员杂谈