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