我想用AES加密數據,但我不知道爲什麼輸出大於輸入。 我用這個函數來導出密鑰加密數據大於輸入數據
public byte[] deriveKey(String p, byte[] s, int i, int l) throws Exception {
PBEKeySpec ks = new PBEKeySpec(p.toCharArray(), s, i, l);
SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
return skf.generateSecret(ks).getEncoded();
}
此後我發送其的數據(112個字節)和鍵加密函數,但我得到加密的數據(154個字節)
public String encrypt(String s,byte[] d) throws Exception {
// Perform Encryption
SecretKeySpec eks = new SecretKeySpec(d, "AES");
Cipher c = Cipher.getInstance("AES/CTR/NoPadding");
c.init(Cipher.ENCRYPT_MODE, eks, new IvParameterSpec(new byte[16]));
byte[] es = c.doFinal(s.getBytes(StandardCharsets.UTF_8));
}
加密不是壓縮。根據加密方法,加密結果可以更大或更小。 –
@ישואוהבאותך但不是在OP的情況下。由於他使用的是CTR模式,因此得到的密文應該與明文完全相同的字節長度。 –
你的例子不完整。你加密函數返回一個字符串,但是它的最後一個語句返回一個字節數組。我的猜測是,在返回結果之前,你的base64將對結果進行編碼,這將考慮結果的大小。 –