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();
}
を導出するために、この機能を使用(154バイト)私は(112バイト)のデータと暗号化機能にキーを送るが、私は暗号化されたデータを取得
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モードを使用しているので、得られる暗号文は平文と全く同じバイト長でなければなりません。 –
あなたの例は不完全でした。暗号化関数は文字列を返しますが、最後の文はバイト配列を返します。私の推測では、あなたの結果は、結果のサイズを考慮に入れて返す前に、結果をコード化しています。 –