📄 des.java
字号:
package com.cmcc.common.util;
import java.util.Date;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.IvParameterSpec;
import com.cmcc.bean.EncryptedByte;
import com.cmcc.bean.EncryptedData;
public class DES {
private final byte[] IV = new byte[]{-29, 105, 5, 40, -94, -98, -113, -100};
/**
*
* 用DES方法加密输入的字节
*
* bytKey需为8字节长,是加密的密码
*
*/
public byte[] encryptByDES(byte[] bytP, byte[] bytKey) throws Exception {
DESKeySpec desKS = new DESKeySpec(bytKey);
SecretKeyFactory skf = SecretKeyFactory.getInstance("DES");
SecretKey sk = skf.generateSecret(desKS);
Cipher cip = Cipher.getInstance("DES/CBC/PKCS5Padding");
cip.init(Cipher.ENCRYPT_MODE, sk, new IvParameterSpec(IV));
return cip.doFinal(bytP);
}
/**
*
* 用DES方法解密输入的字节
*
* bytKey需为8字节长,是解密的密码
*
*/
public byte[] decryptByDES(byte[] bytE, byte[] bytKey) throws Exception {
DESKeySpec desKS = new DESKeySpec(bytKey);
SecretKeyFactory skf = SecretKeyFactory.getInstance("DES");
SecretKey sk = skf.generateSecret(desKS);
Cipher cip = Cipher.getInstance("DES/CBC/PKCS5Padding");
cip.init(Cipher.DECRYPT_MODE, sk, new IvParameterSpec(IV));
return cip.doFinal(bytE);
}
public byte[] data2Byte(EncryptedByte encryptedData) {
short len[] = encryptedData.getLen();
byte buff[] = new byte[len[0] + 11 * 2];
for (int i = 0; i < len.length; i++) {
byte temp[] = ByteOprs.short2byte(len[i]);
buff[i * 2] = temp[0];
buff[i * 2 + 1] = temp[1];
}
int length = 22;
byte temp[] = encryptedData.getUserType();
for (int i = 0; i < temp.length; i++) {
buff[length + i] = temp[i];
}
length += temp.length;
temp = encryptedData.getUserUri();
for (int i = 0; i < temp.length; i++) {
buff[length + i] = temp[i];
}
length += temp.length;
temp = encryptedData.getDomain();
for (int i = 0; i < temp.length; i++) {
buff[length + i] = temp[i];
}
length += temp.length;
temp = encryptedData.getUserIp();
for (int i = 0; i < temp.length; i++) {
buff[length + i] = temp[i];
}
length += temp.length;
temp = encryptedData.getUserMobileNo();
for (int i = 0; i < temp.length; i++) {
buff[length + i] = temp[i];
}
length += temp.length;
temp = encryptedData.getSignInTime();
for (int i = 0; i < temp.length; i++) {
buff[length + i] = temp[i];
}
length += temp.length;
temp = encryptedData.getSignInTimeOut();
for (int i = 0; i < temp.length; i++) {
buff[length + i] = temp[i];
}
length += temp.length;
temp = encryptedData.getUserSid();
for (int i = 0; i < temp.length; i++) {
buff[length + i] = temp[i];
}
length += temp.length;
temp = encryptedData.getUserStatus();
for (int i = 0; i < temp.length; i++) {
buff[length + i] = temp[i];
}
length += temp.length;
temp = encryptedData.getEid();
for (int i = 0; i < temp.length; i++) {
buff[length + i] = temp[i];
}
return buff;
}
public EncryptedData byte2date(byte buff[]) {
byte temp[] = new byte[20];
System.arraycopy(buff, 0, temp, 0, 20);
short len[] = ByteOprs.byte2Short(temp);
EncryptedData encryptedData = new EncryptedData();
int length = 20;
String userType = new String(subBuff(buff, length, len[1]));
length += len[1];
encryptedData.setUserType(userType);
String userUri = new String(subBuff(buff, length, len[2]));
length += len[2];
encryptedData.setUserUri(userUri);
String domain = new String(subBuff(buff, length, len[3]));
length += len[3];
encryptedData.setDomain(domain);
String userIp = new String(subBuff(buff, length, len[4]));
length += len[4];
encryptedData.setUserIp(userIp);
String userMobileNo = new String(subBuff(buff, length, len[5]));
length += len[5];
encryptedData.setUserMobileNo(userMobileNo);
long signInTime = ByteOprs.getlong(subBuff(buff, length, len[6]), 0);
length += len[6];
encryptedData.setSignInTime(signInTime);
long signInTimeOut = ByteOprs.getlong(subBuff(buff, length, len[7]), 0);
length += len[7];
encryptedData.setSignInTimeOut(signInTimeOut);
String userSid = new String(subBuff(buff, length, len[8]));
length += len[8];
encryptedData.setUserSid(userSid);
String userStatus = new String(subBuff(buff, length, len[9]));
length += len[9];
encryptedData.setUserStatus(userStatus);
String eid = new String(subBuff(buff, length, len[10]));
length += len[10];
encryptedData.setEid(eid);
return encryptedData;
}
public byte[] makeCredential(int keyTppe, int domainType, int credentialType, int netType, int expireTime,
String userType, String userUri, String domain, String userIp, String userMobileNo, String signInTime,
String signInTimeOut, String sserSid, String userStatus) {
StringBuffer cb = new StringBuffer();
cb.append(netType);
cb.append(credentialType);
cb.append(domainType);
cb.append(Integer.toBinaryString(keyTppe));
byte buff[] = new byte[5];
buff[0] = Byte.parseByte(String.valueOf(Integer.parseInt(cb.toString(), 2)));
byte bb[] = String.valueOf(expireTime).getBytes();
for (int i = 0; i < bb.length; i++) {
buff[i + 1] = bb[i];
}
return buff;
}
private byte[] subBuff(byte buff[], int from, int length) {
if (buff == null) {
return null;
}
if (buff.length < from + length) {
return null;
}
byte temp[] = new byte[length];
for (int i = 0; i < length; i++) {
temp[i] = buff[from + i];
}
return temp;
}
public static void main(String arg[]) {
EncryptedByte encryptedData = new EncryptedByte();
encryptedData.setUserType("1");
encryptedData.setUserUri("http://www.sina.com.cn");
encryptedData.setDomain("domain");
encryptedData.setUserIp("192.168.0.1");
encryptedData.setUserMobileNo("13800138000");
long time = (new Date()).getTime();
System.out.println(time);
encryptedData.setSignInTime(time);
encryptedData.setSignInTimeOut((new Date()).getTime());
encryptedData.setUserSid("200001");
encryptedData.setUserStatus("0");
DES des = new DES();
byte buff[] = des.data2Byte(encryptedData);
String key1 = ByteOprs.generatorKey();
try {
byte bytOut[] = des.encryptByDES(buff, ByteOprs.getKeyByStr(key1));
String credential = BASE64.getBASE64(bytOut);
System.out.println(credential);
byte bytIn[] = BASE64.getFromBASE64(credential);
byte outBuff[] = des.decryptByDES(bytIn, ByteOprs.getKeyByStr(key1));
EncryptedData outEncryptedData = des.byte2date(outBuff);
System.out.println(outEncryptedData.getUserUri());
System.out.println(outEncryptedData.getUserMobileNo());
System.out.println(outEncryptedData.getSignInTime());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -