我的一个Android应用程序中有一个mcrypt加密和解密例程。这基本上是解密通过提取的字符串。远程通话。当然,“秘密密钥”存储在代码中,但任何拥有apktool的人都可以看到代码并看到我的密钥。
无论如何都要对所有Java代码进行加密,这样即使解编也不可读/可理解?
我听说过ProGuard,但是从阅读它来看,似乎不足以达到这个目的。
答案 0 :(得分:4)
你永远不应该在代码中放入密钥。编译后的代码可以很容易地进行逆向工程,任何拥有调试器的人都可以挂钩到创建实际密钥的位置。安全性总是依赖于算法,假设客户端代码是公共的,潜在的攻击者有副本。
隐藏代码中的文字只会在获取密钥的过程中延迟攻击者,但它不会以任何方式阻止它。
答案 1 :(得分:1)
可以读取客户端计算机上的所有代码。你能做的最好的事情就是让找到钥匙更加困难。
建议:您的代码中会有一些文本字符串,例如“请等待您的请求正在处理...”找到这样的消息,并生成一个字节数组,通过异或来将该消息更改为您的真实密钥带有文本字符串的字节数组。
e.g。 “松鼠”异或[16 1D 10 19 1A 13 0B 18] => “大象”
只有“squirrel”和字节数组实际出现在您的代码中。
答案 2 :(得分:0)
我也不是安全专家,但我知道VM编译语言可以很容易地反编译你可以尝试使用ProGuard来混淆你的代码但仍然可读,我会建议它尝试保存它并加密你的密钥使用Java Crypto之后,在Android Crypting Database或Encrypt Information in Android类似问题之前就提出了这样的问题,我不希望回答您的问题,但会给您一个指导,从现在开始。
答案 3 :(得分:0)
每次需要获取字符串
时,您都可以生成新密钥然后你需要与硬编码证书进行密钥交换(如果正确实施,这是安全的)
或仅使用SSL,如果它只是为了在传输过程中保护