java—当读取加密文件时,我得到“没有找到流中密文的匹配密钥”

8gsdolmq  于 2021-07-12  发布在  Java
关注(0)|答案(0)|浏览(221)

下面是我用来获取加密文件的代码,遵循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() . 我不知道为什么,我有最新版本的密码和一切。有什么想法吗?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题