下面是我用来获取加密文件的代码,遵循android的文档。我得到一个错误“文件已经存在”,这就是为什么我删除文件,如果我必须写在它:
private static EncryptedFile getEncryptedFile(Context mCtx, String fileName, boolean write){
File file = new File(mCtx.getFilesDir(),fileName);
if(write && file.exists())
file.delete();
try {
return new EncryptedFile.Builder(
mCtx,
file,
Objects.requireNonNull(getMasterKey(mCtx)),
EncryptedFile.FileEncryptionScheme.AES256_GCM_HKDF_4KB
).build();
} catch (GeneralSecurityException | IOException e) {
e.printStackTrace();
}
return null;
}
private static MasterKey getMasterKey(Context mCtx) {
try {
KeyGenParameterSpec spec = new KeyGenParameterSpec.Builder(
Constants.MASTER_KEY_ALIAS,
KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT)
.setBlockModes(KeyProperties.BLOCK_MODE_GCM)
.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE)
.setKeySize(KEY_SIZE)
.build();
return new MasterKey.Builder(mCtx)
.setKeyGenParameterSpec(spec)
.build();
} catch (Exception e) {
Log.e(mCtx.getClass().getSimpleName(), "Error on getting master key", e);
}
return null;
}
当我试图用下面的方法读取文件时 java.io.IOException: No matching key found for the ciphertext in the stream.
.
EncryptedFile encryptedFile = getEncryptedFile(mCtx, filename, false);
FileInputStream fileInputStream = encryptedFile.openFileInput();
InputStreamReader inputStreamReader =
new InputStreamReader(fileInputStream, StandardCharsets.UTF_8);
BufferedReader reader = new BufferedReader(inputStreamReader);
String line = reader.readLine();
if(line == null)
return new ArrayList<T>();
while(line != null){
stringBuilder.append(line).append('\n');
line = reader.readLine();
}
错误通常发生在 reader.readLine()
. 我不知道为什么,我有最新版本的密码和一切。有什么想法吗?
暂无答案!
目前还没有任何答案,快来回答吧!