0
我用下面的代碼來加密數據。我的輸入是16字節,密鑰是16字節,但我得到的輸出(加密數據)是32字節。爲什麼?爲什麼AES 128加密擴展數據?
public static byte[] encrypt(byte[] plainText, byte[] key) {
try {
byte[] passwordKey128 = Arrays.copyOfRange(key, 0, 16);
SecretKeySpec secretKey = new SecretKeySpec(passwordKey128, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
byte[] cipherText = cipher.doFinal(plainText);
// String encryptedString = Base64.getEncoder().encodeToString(cipherText);
return cipherText;
可能是什麼原因? AES是否添加了一些數據?
可能的重複[Where to put information about padding length?](http://stackoverflow.com/questions/26930911/where-to-put-information-about-padding-length) –
根據標準,AES有一個128位的塊大小。換句話說,其他塊大小是非標準的。您引用不會透露軟件開發人員「cipher.doFinal()」的功能。因此,恕我直言,最好請求軟件開發人員解釋您觀察到的現象。 –
一般建議:**始終使用完全合格的密碼字符串**'Cipher.getInstance(「AES」);'可能導致取決於默認安全提供程序的不同密碼。它很可能會導致''AES/ECB/PKCS5Padding'',但它不一定是。如果它改變,你將失去不同JVM之間的兼容性。 –