【发布时间】:2011-10-31 09:40:41
【问题描述】:
我的一个 Android 应用程序中有一个 mcrypt 加密和解密例程。这本质上是解密通过获取的字符串。远程呼叫。当然,“密钥”存储在代码中,但是任何使用 apktool 的人都可以明显地看到代码并看到我的密钥。
有没有办法加密所有的 Java 代码,这样即使反编译它也无法阅读/理解?
我听说过 ProGuard,但通过阅读它,似乎不足以达到此目的。
【问题讨论】:
-
问题是为什么要加密字符串?如果是为了传输和服务器存储安全,则使用公钥加密。如果您想对用户“隐藏”它,那么您就不走运了,因为您的应用程序可以“看到”所有内容,用户也可以。
-
字符串被加密以隐藏流式传输文件的位置 - 目的是混淆并至少使临时用户/脚本小子更难独立于应用程序下载 mp3。我知道你在说什么,并且完全理解应用程序可以看到的任何东西——任何有足够决心的人都可以调试、解密或反编译——我只是想让它变得更加困难。有决心的人仍然会经历这一切并取得成功。没什么大不了的..基本上把脚本小子挡在外面..
-
为什么不让客户端生成密钥对并将其公钥与请求一起发送到服务器?
-
@Nathan 好主意,在客户端上创建一个随机密钥。另外:密钥可以存储在 SQLite DB 中或以其他形式存储在应用程序私有存储中。这应该可以防止从您的应用外部访问 - 至少在非 root 设备上。
-
@HannoBinder,是的,或者可以根据所需的复杂性即时生成密钥。
标签: java android encryption mcrypt