首页 > 编程语言 > 详细

Java DES加密解密

时间:2014-12-09 02:06:19      阅读:379      评论:0      收藏:0      [点我收藏+]
import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;

public class CryptKit {

	private final static String DES = "DES";

	public static void main(String args[]) throws Exception {
		String str = encrypt("The cold night", "12345678");
		System.out.println(str);
		String str2 = decrypt("63B121C4EA212F8BC74E8113BDFBFB81", "12345678");
		System.out.println(str2);
	}

	// 加密
	public static byte[] encrypt(byte[] data, byte[] key) throws Exception {
		Cipher cipher = Cipher.getInstance(DES);
		DESKeySpec ds = new DESKeySpec(key);
		SecureRandom sr = new SecureRandom();
		SecretKeyFactory skfactory = SecretKeyFactory.getInstance(DES);
		SecretKey skey = skfactory.generateSecret(ds);
		cipher.init(Cipher.ENCRYPT_MODE, skey, sr);
		byte[] b = cipher.doFinal(data);
		return b;
	}

	// 加密
	public static String encrypt(String data, String key) throws Exception {
		return byte2hex(encrypt(data.getBytes(), key.getBytes()));
	}

	// 解密
	public static byte[] decrypt(byte[] data, byte[] key) throws Exception {
		Cipher cipher = Cipher.getInstance(DES);
		DESKeySpec ds = new DESKeySpec(key);
		SecureRandom sr = new SecureRandom();
		SecretKeyFactory skfactory = SecretKeyFactory.getInstance(DES);
		SecretKey skey = skfactory.generateSecret(ds);
		cipher.init(Cipher.DECRYPT_MODE, skey, sr);
		return cipher.doFinal(data);
	}

	// 解密
	public static String decrypt(String data, String key) throws Exception {
		return new String(decrypt(hex2byte(data.getBytes()), key.getBytes()));
	}

	private static String byte2hex(byte[] b) {
		StringBuilder hs = new StringBuilder();
		String stmp;
		for (int n = 0; b != null && n < b.length; n++) {
			stmp = Integer.toHexString(b[n] & 0XFF);
			if (stmp.length() == 1)
				hs.append(‘0‘);
			hs.append(stmp);
		}
		return hs.toString().toUpperCase();
	}

	private static byte[] hex2byte(byte[] b) {
		if ((b.length % 2) != 0)
			throw new IllegalArgumentException();
		byte[] b2 = new byte[b.length / 2];
		for (int n = 0; n < b.length; n += 2) {
			String item = new String(b, n, 2);
			b2[n / 2] = (byte) Integer.parseInt(item, 16);
		}
		return b2;
	}

}

Java DES加密解密

原文:http://my.oschina.net/u/991892/blog/353985

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!