我当前在尝试解密已加密的文件时收到 AEADBadTagException。我在 stackoverflow 上搜索了几乎所有地方,但无法找到解决方案,并希望这只是我犯的一个小错误或与编码等有关,因为 GCM 无法验证它正在生成的标签。
\n\n我相信问题出在我尝试加密/解密的文件中的某个地方。同样的代码适用于图像,但是,当我尝试加密 PDF 时,它失败并给出上述错误。
\n\n下面的代码没有使用 CipherOutputStream/CipherInputStream,但我已经尝试过两者但没有运气。
\n\n我知道加密/解密方法不应该这样编写,特别是对于硬编码的 IV,但现在我只是想让它工作,然后稍后正确保护这些方法。
\n\n我正在使用 Android KeyStore 来获取我的密钥。我知道这部分是有效的,因为我在应用程序中有很多其他部分使用相同的方法使用密钥库。另外,此方法适用于图像。
\n\n该错误发生在 cipher.doFinal(encryptedBytes) 上。当我使用 CipherInputStream 时,它发生在 CipherInputStream(EncryptedFileStream, cipher) 上
\n\n这是代码以及错误堆栈,非常感谢任何帮助:
\n\n加密
\n\n val fileBytes = inputStream.readBytes()\n val cipher = Cipher.getInstance("AES/GCM/NoPadding")\n keyStoreService.checkKeyAndCreate(ALIAS_FILE_KEY)\n val key = keyStoreService.getFileKey(ALIAS_FILE_KEY)\n val iv = byteArrayOf(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\n cipher.init(Cipher.ENCRYPT_MODE, key, GCMParameterSpec(128, iv))\n val encryptedBytes = cipher.doFinal(fileBytes)\n outputStream = FileOutputStream(file)\n outputStream.write(encryptedBytes)\n outputStream.flush()\n inputStream.close()\n outputStream.close()\nRun Code Online (Sandbox Code Playgroud)\n\n解密 …
我有一个文本文件,我正在使用类似的东西
{% import '/macros/macro.macro' as macro with context %}
Run Code Online (Sandbox Code Playgroud)
但是,我想从父目录中的文件夹导入宏.不知道如何处理这个问题.我尝试过使用〜和..但没有成功.有什么建议?
谢谢