DES是一种对称的加密方式,即需要相同的密钥进行加密解密。为了方便日后使用,此处将DES的加解密方法进行了封装,参数和返回值统一String数据类型。代码较为简单,不多解释,如有不对的地方,望多多指教。
package encrypt;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.IvParameterSpec;
import org.apache.commons.codec.binary.Base64;
public class MyDesUtil {
//密钥
private final static String SECRET_KEY = "aaaaaaaa";
//要加密的内容
private static String content = "rootroofdsft";
public static void main(String[] args) {
System.out.println("=======原文=====");
System.out.println(content);
String encryptStr = encrypt(content, SECRET_KEY);
System.out.println("=======加密密文=====");
System.out.print(encryptStr);
String decryptStr = decrypt(encryptStr, SECRET_KEY);
System.out.println("=======解密=====");
System.out.println(decryptStr);
}
/**
*
* @param content 要加密内容
* @param secretKey 密钥
* @return 密文,字符串
*/
public static String encrypt(String content,String secretKey) {
try {
//将String 转化为 byte 数组
byte[] contentByte = content.getBytes();
byte[] secretKeyByte = secretKey.getBytes();
DESKeySpec keySpec=new DESKeySpec(secretKeyByte);
SecretKeyFactory keyFactory=SecretKeyFactory.getInstance("DES");
SecretKey key=keyFactory.generateSecret(keySpec);
Cipher cipher=Cipher.getInstance("DES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, key, new IvParameterSpec(keySpec.getKey()));
byte[] result=cipher.doFinal(contentByte);
//将byte[] 转化成string
String resultStr = new Base64().encodeToString(result);
return resultStr;
} catch (Exception e) {
// TODO Auto-generated catch block
System.out.println("exception:"+e.toString());
}
return null;
}
/**
*
* @param content 要解密内容
* @param secretKey 密钥
* @return 解密结果 ,明文
*/
public static String decrypt(String content,String secretKey) {
try {
byte [] contentByte =new Base64().decodeBase64(content);
byte [] secretKeyByte = secretKey.getBytes();
DESKeySpec keySpec=new DESKeySpec(secretKeyByte);
SecretKeyFactory keyFactory=SecretKeyFactory.getInstance("DES");
SecretKey key=keyFactory.generateSecret(keySpec);
Cipher cipher=Cipher.getInstance("DES/CBC/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(secretKeyByte));
byte[] result=cipher.doFinal(contentByte);
String resultStr = new String (result);
return resultStr;
} catch (Exception e) {
// TODO Auto-generated catch block
System.out.println("exception:"+e.toString());
}
return null;
}
}
测试结果如下:
参考: https://blog.csdn.net/qq_18870023/article/details/52180768