Java 加密和解密应用程序密钥

Java 加密和解密应用程序密钥,java,android,encryption,oauth,proguard,Java,Android,Encryption,Oauth,Proguard,我有很多用于我的android应用程序使用的各种身份验证方法的密钥。它们目前是硬编码的,我只需在必要时将密钥传递给服务器 我想将它们存储为加密的,并在必要时解密它们。理想情况下,当有人反编译我的应用程序时,他们看不到我的密钥是什么,或者如果他们可以看到一些字符串,那么它将只是一个未通过我的解密函数的加密密钥 我正在寻找处理这个问题的最佳实践 应该有一种加密方法和解密方法来提供足够的熵,这样人们就不会仅仅看到我的加密密钥就猜测我是用base64或其他已知方法加密的 洞察欣赏你不会比一个偶然的攻击者

我有很多用于我的android应用程序使用的各种身份验证方法的密钥。它们目前是硬编码的,我只需在必要时将密钥传递给服务器

我想将它们存储为加密的,并在必要时解密它们。理想情况下,当有人反编译我的应用程序时,他们看不到我的密钥是什么,或者如果他们可以看到一些字符串,那么它将只是一个未通过我的解密函数的加密密钥

我正在寻找处理这个问题的最佳实践

应该有一种加密方法和解密方法来提供足够的熵,这样人们就不会仅仅看到我的加密密钥就猜测我是用base64或其他已知方法加密的


洞察欣赏

你不会比一个偶然的攻击者更幸运地阻止他。更不用说,任何人都可以确定您的代码的用途以及密钥的加密方式,包嗅探器之类的工具很容易使您的密钥变得无用


我建议您转移信任,这样您就不需要对android客户端进行身份验证(除了用户拥有的用户名和密码之外)。如果您能准确地告诉我们您正试图保护什么,那么我可以编辑此答案,以提供有关如何安全保护它的更详细的想法。

您将不会比一个偶然的攻击者更幸运地阻止它。更不用说,任何人都可以确定您的代码的用途以及密钥的加密方式,包嗅探器之类的工具很容易使您的密钥变得无用


我建议您转移信任,这样您就不需要对android客户端进行身份验证(除了用户拥有的用户名和密码之外)。如果您能准确地告诉我们您正试图保护什么,那么我可以编辑此答案,以提供有关如何安全保护它的更详细的想法。

您将不会比一个偶然的攻击者更幸运地阻止它。更不用说,任何人都可以确定您的代码的用途以及密钥的加密方式,包嗅探器之类的工具很容易使您的密钥变得无用


我建议您转移信任,这样您就不需要对android客户端进行身份验证(除了用户拥有的用户名和密码之外)。如果您能准确地告诉我们您正试图保护什么,那么我可以编辑此答案,以提供有关如何安全保护它的更详细的想法。

您将不会比一个偶然的攻击者更幸运地阻止它。更不用说,任何人都可以确定您的代码的用途以及密钥的加密方式,包嗅探器之类的工具很容易使您的密钥变得无用

我建议您转移信任,这样您就不需要对android客户端进行身份验证(除了用户拥有的用户名和密码之外)。如果您能准确地告诉我们您正试图保护什么,那么我可以编辑此答案,以提供有关如何安全保护它的更详细的想法

我正在寻找处理这个问题的最佳实践

如果您尝试使用的API提供了瞬态令牌(例如AWS的令牌自动售货机),请使用它,这样您就不会首先将长寿命密钥烘焙到应用程序中。或者,正如hexafraction所建议的那样,为此制定您自己的方案,其中API密钥位于您的服务器上,并且您的应用程序使用您的服务器代表应用程序执行操作

如果您正在使用的API能够将您对API的使用与应用程序的签名密钥(例如,Play Services)绑定在一起,那么没有签名密钥就无法使用您的API密钥,因此可以找到它这一事实是不成问题的

欢迎您使用spring for,它将加密应用程序中的数据。这并不能阻止一个下定决心的黑客,但至少会让一个黑客慢下来。偶尔的黑客很可能会绕过你的应用程序,选择较弱的猎物

如果这些都不是一个选择,不要担心。例如,如果您是一名独立开发人员,而被盗的API密钥是您最担心的100个问题之一,那么您的担心就太多了。只需计划定期旋转密钥(例如,每次应用程序更新),最终在不再使用旧密钥时将其退役,以最大限度地降低攻击者获取您密钥时造成损坏的风险。你有更重要的事情要做,比如你将如何营销应用程序

特别是,滚动您自己的加密,而不仅仅是购买DexGuard,是浪费时间。如果你负担不起DexGuard的许可费,你也负担不起在自己的加密软件上大惊小怪。而且,就保护密钥而言,您自己的加密程序值得花时间编写它的可能性不大

我正在寻找处理这个问题的最佳实践

如果您尝试使用的API提供了瞬态令牌(例如AWS的令牌自动售货机),请使用它,这样您就不会首先将长寿命密钥烘焙到应用程序中。或者,正如hexafraction所建议的那样,为此制定您自己的方案,其中API密钥位于您的服务器上,并且您的应用程序使用您的服务器代表应用程序执行操作

如果您正在使用的API能够将您对API的使用与应用程序的签名密钥(例如,Play Services)绑定在一起,那么没有签名密钥就无法使用您的API密钥,因此可以找到它这一事实是不成问题的

欢迎您使用spring for,它将加密应用程序中的数据。这并不能阻止一个下定决心的黑客,但至少会让一个黑客慢下来。偶尔的黑客很可能会绕过你的应用程序,选择较弱的猎物

如果这些都不是一个选择,不要担心。例如,如果您是一名独立开发人员,而被盗的API密钥是您最担心的100个问题之一,那么您的担心就太多了。只需计划定期旋转密钥(例如,每次应用程序更新),最终在不再使用旧密钥时将其退役,以最大限度地降低攻击者获取您密钥时造成损坏的风险。你有更重要的事要做,就像你现在的样子