700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Java 实现DES加密解密

Java 实现DES加密解密

时间:2020-05-31 13:45:08

相关推荐

Java 实现DES加密解密

import java.security.*;

import javax.crypto.Cipher;

import javax.crypto.SecretKey;

import javax.crypto.SecretKeyFactory;

import javax.crypto.spec.DESKeySpec;

/**

* 字符串工具集合

* @author Liudong

*/

public class StringUtils {

private static final String PASSWORD_CRYPT_KEY = "__jDlog_";

private final static String DES = "DES";

/**

* 加密

* @param src 数据源

* @param key 密钥,长度必须是8的倍数

* @return 返回加密后的数据

* @throws Exception

*/

public static byte[] encrypt(byte[] src, byte[] key)throws Exception {

//DES算法要求有一个可信任的随机数源

SecureRandom sr = new SecureRandom();

// 从原始密匙数据创建DESKeySpec对象

DESKeySpec dks = new DESKeySpec(key);

// 创建一个密匙工厂,然后用它把DESKeySpec转换成

// 一个SecretKey对象

SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);

SecretKey securekey = keyFactory.generateSecret(dks);

// Cipher对象实际完成加密操作

Cipher cipher = Cipher.getInstance(DES);

// 用密匙初始化Cipher对象

cipher.init(Cipher.ENCRYPT_MODE, securekey, sr);

// 现在,获取数据并加密

// 正式执行加密操作

return cipher.doFinal(src);

}

/**

* 解密

* @param src 数据源

* @param key 密钥,长度必须是8的倍数

* @return 返回解密后的原始数据

* @throws Exception

*/

public static byte[] decrypt(byte[] src, byte[] key)throws Exception {

// DES算法要求有一个可信任的随机数源

SecureRandom sr = new SecureRandom();

// 从原始密匙数据创建一个DESKeySpec对象

DESKeySpec dks = new DESKeySpec(key);

// 创建一个密匙工厂,然后用它把DESKeySpec对象转换成

// 一个SecretKey对象

SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);

SecretKey securekey = keyFactory.generateSecret(dks);

// Cipher对象实际完成解密操作

Cipher cipher = Cipher.getInstance(DES);

// 用密匙初始化Cipher对象

cipher.init(Cipher.DECRYPT_MODE, securekey, sr);

// 现在,获取数据并解密

// 正式执行解密操作

return cipher.doFinal(src);

}

/**

* 密码解密

* @param data

* @return

* @throws Exception

*/

public final static String decrypt(String data){

try {

return new String(decrypt(hex2byte(data.getBytes()),

PASSWORD_CRYPT_KEY.getBytes()));

}catch(Exception e) {

}

return null;

}

/**

* 密码加密

* @param password

* @return

* @throws Exception

*/

public final static String encrypt(String password){

try {

return byte2hex(encrypt(password.getBytes(),PASSWORD_CRYPT_KEY.getBytes()));

}catch(Exception e) {

}

return null;

}

/**

* 二行制转字符串

* @param b

* @return

*/

public static String byte2hex(byte[] b) {

String hs = "";

String stmp = "";

for (int n = 0; n < b.length; n++) {

stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));

if (stmp.length() == 1)

hs = hs + "0" + stmp;

else

hs = hs + stmp;

}

return hs.toUpperCase();

}

public 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;

}

public static void main(String[] args) {

String pwd = "测试dasdfaaaaaaa";

System.out.println("测试数据="+pwd);

String data = encrypt(pwd);

System.out.println("加密后的数据data="+data);

pwd = decrypt(data);

System.out.println("解密后="+pwd);

}

}

运行结果:

D:\java>java StringUtils

测试数据=测试dasdfaaaaaaa

加密后的数据data=16FA9924D269C0BD98E5CE8AC23A42898311435A70E2DE90

解密后=测试dasdfaaaaaaa

D:\java>

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。