Я хочу, чтобы зашифровать/расшифровать файл в формате PDF на Android (но это ява общая проблема)Шифрование/PDF файл Расшифровать с Java
У меня есть этот код, чтобы сгенерировать свой ключ:
public static byte[] getRawKey(byte[] seed) throws Exception {
KeyGenerator kgen = KeyGenerator.getInstance("AES");
SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
sr.setSeed(seed);
kgen.init(128, sr);
SecretKey skey = kgen.generateKey();
byte[] raw = skey.getEncoded();
return raw;
}
мой код для записи зашифрованного файла:
inStream = new BufferedInputStream(conn.getInputStream());
outFile = new File(path + fileName);
outStream = new BufferedOutputStream(new FileOutputStream(outFile), 4096);
byte[] data = new byte[4096];
String seed = "password";
byte[] rawKey = Utils.getRawKey(seed.getBytes());
SecretKeySpec skeySpec = new SecretKeySpec(rawKey, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
int bytesRead = 0;
while((bytesRead = inStream.read(data, 0, data.length)) >= 0)
{
outStream.write(cipher.doFinal(data),0, bytesRead);
}
outStream.flush();
outStream.close();
inStream.close();
и мой код, чтобы расшифровать его (и сохранить его, к новому расшифрованного файла):
FileInputStream fis = new FileInputStream(file);
FileOutputStream fos = new FileOutputStream(tmp_file);
String seed = "password";
byte[] rawKey = Utils.getRawKey(seed.getBytes());
SecretKeySpec skeySpec = new SecretKeySpec(rawKey, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, skeySpec);
int b;
byte[] data = new byte[4096];
while((b = fis.read(data)) != -1) {
fos.write(cipher.doFinal(data), 0, b);
}
fos.flush();
fos.close();
fis.close();
Я много читал на StackOverflow, и стараются следовать инструкциям, но это не работает, и я получил эту ошибку:
javax.crypto.BadPaddingException: pad block corrupted at com.android.org.bouncycastle.jcajce.provider.symmetric.util.BaseBlockCipher.engineDoFinal(BaseBlockCi
Что я делаю неправильно? Есть ли какая-либо специфика, связанная с файлом PDF?
Я пробовал свой код, но теперь у меня есть javax.crypto.IllegalBlockSizeException: последний незавершенный блок в расшифровке – JuSchz
«пароль» - это просто пример для этого случая. Что вы предлагаете для генерации ключей? – JuSchz
Вам необходимо убедиться, что для шифрования и дешифрования используется тот же ключ, которым этот текущий подход не является. – laz