在網上也下載了一些AES加解密的,但是java就是解不開,本人對delphi還不熟悉,希望大仙們幫幫我,謝謝!
現附上Java例子:
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.SecretKeySpec;
import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
public class AES {
public enum KeySize {
ks16(16), ks24(24), ks32(32);
private int value;
KeySize(int value) {
this.value = value;
}
}
/**
* AES加密后生成Base64二次加密
*
* @param content
* @param passwd
* @param ks
*
* @return
*/
public static String encryptBase64(byte[] content, String passwd, KeySize ks) {
byte[] bytes = encrypt(content, passwd, ks);
if (bytes != null)
return new BASE64Encoder().encode(bytes);
else
return null;
}
/**
* 密碼自動補全
*
* @param in
* @param ks
* 如果密碼的長度不是16,24,32,則自動補全(二進制0)
*
* @return
*/
private static byte[] ZeroPadding(byte[] in, KeySize ks) {
Integer copyLen = in.length;
if (copyLen > ks.value) {
copyLen = ks.value;
}
byte[] out = new byte[ks.value];
System.arraycopy(in, 0, out, 0, copyLen);
return out;
}
/**
* AES加密
*
* @param content
* @param passwd
* @param ks
*
* @return
*/
public static byte[] encrypt(byte[] content, String passwd, KeySize ks) {
try {
Cipher aesECB = Cipher.getInstance("AES/ECB/PKCS5Padding");
SecretKeySpec key = new SecretKeySpec(ZeroPadding(passwd.getBytes(), ks), "AES");
aesECB.init(Cipher.ENCRYPT_MODE, key);
return aesECB.doFinal(content);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
}
return null;
}
/**
* 解密
*
* @param content
* @param passwd
* @param ks
*
* @return
*/
public static byte[] decrypt(byte[] content, String passwd, KeySize ks) {
try {
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");// 創建密碼器
SecretKeySpec key = new SecretKeySpec(ZeroPadding(passwd.getBytes(), ks), "AES");
cipher.init(Cipher.DECRYPT_MODE, key);// 初始化
return cipher.doFinal(content); // 解密
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
}
return null;
}
/**
* AES解密,先Base64解密,在進行AES解密
*
* @param content
* @param passwd
* @param ks
*
* @return
*
* @throws IOException
*/
public static byte[] decryptBase64(String content, String passwd, KeySize ks) throws IOException {
byte[] deBytes = new BASE64Decoder().decodeBuffer(content);
return decrypt(deBytes, passwd, ks);
}
public static void main(String[] args) throws Exception {
String content = "我很好";
String key = "1234567890123456";
// System.out.println(Util.byte2hex(AES.encrypt(content.getBytes("utf-8"), key, KeySize.ks16)));
// System.out.println(new String(AES.decrypt(Util.hex2byte("0da244f228acb14d6f9c02aac527dc52"), key, KeySize.ks16),"utf-8"));
String eb = AES.encryptBase64(content.getBytes("utf-8"), key, KeySize.ks16);
System.out.println(eb);
System.out.println(Util.byte2hex(eb.getBytes()));
System.out.println(new String(AES.decryptBase64(eb, key, KeySize.ks16), "utf-8"));
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/78853.html
標籤:語言基礎/算法/系統設計
上一篇:如何釋放上一個函式getmem?
下一篇:access中過濾空資料
