Код: Выделить всё
MasterKey masterKey = null;
try {
masterKey = new
MasterKey.Builder(context, MasterKey.DEFAULT_MASTER_KEY_ALIAS)
.setKeyScheme(MasterKey.KeyScheme.AES256_GCM)
.build();
} catch (GeneralSecurityException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Код: Выделить всё
InputStream inputStream = new BufferedInputStream(appCtx.getAssets().open("Sample.txt"));
byte[] fileBytes=new byte[inputStream.available()];
inputStream.read(fileBytes);
File file = new File(Environment.getExternalStorageDirectory(), "Sample.txt");
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
EncryptedFile encryptedFile = new EncryptedFile.Builder(
appCtx,
file,
masterKey,
EncryptedFile.FileEncryptionScheme.AES256_GCM_HKDF_4KB
).build();
OutputStream outputStream = encryptedFile.openFileOutput();
outputStream.write(fileBytes);
outputStream.flush();
outputStream.close();
Код для расшифровки следующий:
Код: Выделить всё
InputStream myInputstream = new BufferedInputStream(appCtx.getAssets().open("Sample.txt"));
File enfile = createFileFromInputStream(myInputstream,appCtx);
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
EncryptedFile encryptedFile = new EncryptedFile.Builder(
appCtx,
enfile,
masterKey,
EncryptedFile.FileEncryptionScheme.AES256_GCM_HKDF_4KB
).build();
InputStream inputStream1 = encryptedFile.openFileInput();
BufferedOutputStream os1 = new BufferedOutputStream( new FileOutputStream(new File(dstPath)));
int length = 0;
byte[] buffer = new byte[1024];
while ((length = inputStream1.read(buffer)) != -1) {
os1.write(buffer, 0, length);
}
os1.close();
}
private static File createFileFromInputStream(InputStream stream, Context context) {
File f = new File(Environment.getExternalStorageDirectory(), "Temp.txt");
BufferedOutputStream os1 = null;
try {
os1 = new BufferedOutputStream( new FileOutputStream(f));
int length = 0;
byte[] buffer = new byte[1024];
while ((length = stream.read(buffer)) != -1) {
os1.write(buffer, 0, length);
}
os1.close();
stream.close();
return f;
} catch (FileNotFoundException e) {
e.printStackTrace();
}catch (IOException e) {
//Logging exception
}
return null;
}
Если записать зашифрованный файл на внешнее хранилище и прочитать его для расшифровки непосредственно из внешнего хранилища, то все будет рабочим файлом. Но если я вставляю зашифрованный файл в папку ресурсов и записываю входной поток, полученный из папки ресурсов, в какой-то временный файл, а затем пытаюсь расшифровать его, выдается ошибка java.io.IOException: для зашифрованного текста в потоке не найден соответствующий ключ.< /strong>
Пожалуйста, помогите мне с этой проблемой.
Спасибо
Подробнее здесь: https://stackoverflow.com/questions/630 ... -exception