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

时间:2016-08-10 15:04:43

标签: security encryption assets

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

提前致谢!

1 个答案:

答案 0 :(得分:0)

在此实施中"种子"你会想到"密码",并且由于你不会要求用户提供密码,你可以对其进行硬编码,或者将其存储在文件中,或者从运行时的服务器,或其他任何服务器。请注意,智能攻击者很可能能够获取此密码并使用它为您的密文生成自己的解密密钥。

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

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

然后你就可以获得你的种子和密文进行解密。