在我們程序員日常工作中避免不了會接觸一下有關於加密算法的需求,所以今天小編帶來的是java中AES128對稱算法的實現。
話不多少接下來代碼搞起來----->
0、准備
首先呢,我們先把jar包准備好
import java.util.Base64; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec;
1、對數據進行加密
private static byte[] encrypt_by_aes(byte[] datas, byte[] key) { return calc_by_aes(Cipher.ENCRYPT_MODE, datas, key); }
這里要說一下 "datas" 是我們需要加密的數據,byte[]字節數組類型。"key"為秘鑰,這里秘鑰也是byte[]字節數組類型。
如果我們的秘鑰是這個樣子:
1D926BD75DFC90D25EEE9286FECBEA9R
需要轉成這個熊樣:
private static final byte[] DEFAULT_KEY = new byte[] {0x1D, (byte) 0x92, 0x6B, (byte) 0xD7, 0x5D, (byte) 0xFC, (byte) 0x90, (byte) 0xD2, 0x5E, (byte) 0xEE, (byte) 0x92, (byte) 0x86, (byte) 0xFE, (byte) 0xCB, (byte) 0xEA, (byte) 0x9R};
好 接下來
private static byte[] calc_by_aes(int mode, byte[] datas, byte[] key) { if (datas == null || key == null || key.length != 16) { return null; } SecretKeySpec keySpec = new SecretKeySpec(key, "AES"); try { Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); cipher.init(mode, keySpec); return cipher.doFinal(datas); } catch (Exception e) { return null; } }
這個是調用的而公共方法
接着需要做數據填充,這里我使用的是PKCS7填充--->
public static final String bytesToHexString(byte[] bArray) { StringBuffer sb = new StringBuffer(bArray.length); String sTemp; for (int i = 0; i < bArray.length; i++) { sTemp = Integer.toHexString(0xFF & bArray[i]); if (sTemp.length() < 2) sb.append(0); sb.append(sTemp.toUpperCase()); } return sb.toString(); }
好,填充完畢后返回的字符串就是我們加密后的密文字符串
至此我們的數據加密就完成了。