在 android 中使用 SALT、SEED、SecretKey 解密文本文件的最佳实践

Best practice for decrypting text file using SALT, SEED, SecretKey in android

我不熟悉安全问题。我正在尝试通过加密文本资产在 android 应用程序中实现对知识分子 属性 的一些基本(有限)保护。为此,我实现了 S.Saurel 此处 http://www.ssaurel.com/blog/how-to-use-cryptography-in-android-applications-2/ 描述的 SimpleCrypto class。我计划使用单独的程序加密数据并将加密数据作为资产文件包含在内,然后解密它们以在应用程序中使用。我的问题是处理解密文件所需的 SALT 字符串和 SEED 字符串的最佳做法是什么?它们应该在 运行 时间生成还是以某种方式存储?它们应该包含在加密 class 中,还是在应用程序的其他地方生成并传递给加密 class?

提前致谢!

在此实现中,"seed" 就是您认为的 "password",并且由于您不会要求用户提供密码,因此您可以对其进行硬编码或存储在文件中,或在运行时从服务器请求它,或其他任何东西。请注意,聪明的攻击者很可能能够获取此密码并使用它为您的密文生成他们自己的解密密钥。

Salt 是一个非秘密值,用作加密的 initialization vector。最佳实践会要求您为每个明文生成一个随机盐,然后向客户端提供密文和未加密的种子。 IV 通常取决于所用密码的块大小,在您的示例中,您生成了一个 256 位密钥,因此您应该为每个明文生成一个随机的 256 位(64 字节)盐并将其与密文。您可以做一些简单的事情,例如生成一个最终字符串:

[2 bytes indicating length of salt][salt][ciphertext]

然后从那里你可以得到你的种子和密文来解密。