⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 des.java

📁 自己实现的AES和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 + -