【发布时间】:2012-04-29 12:59:09
【问题描述】:
我需要在应用程序内存储一个私有字符串密钥。它的值永远不会改变,并在代码中手动设置。我显然不能将它存储为String,因为逆向工程方法会显示它,即使应用了混淆也是如此。
你建议我如何保护这个私钥?
我虽然是存入数据库,但也可以从手机中取出数据库。
PS。这个键是一个特殊的参数,所以是一个重要的方法,它对任何人都不知道是至关重要的!它不是解密密钥。此字符串将用作加密方法(md5 或类似)的参数,然后将结果发送到我们的 Internet 服务。
编辑
抱歉,弄得这么复杂。我想我可以用尽可能少的信息得到答案。
此应用程序将允许用户将一些文本发送到 Internet 服务,然后该服务将该文本发布到网站。我们需要确保文本是通过 Android 手机发送的,因为任何网络机器人脚本都可以模仿 Android 手机并发布垃圾邮件。由于手机不欢迎类似验证码的方法,因此会有一个密钥,它将通过 md5(与其他一些东西)生成哈希码。此哈希将被发送到 Internet 服务。互联网服务将使用相同的密钥得到一个 md5 结果,然后比较它来查看发送者是手机还是某个机器人。
这真的是我可以说的最大值。我希望这已经足够了。
【问题讨论】:
-
“至关重要的是,任何人都不知道它”如果它真的很重要,您根本不能将它包含在应用程序中。否则,攻击者可以使用调试器单步执行您的代码,在您的代码使用该字符串时停止,然后检查内容。攻击者不需要知道如何解密字符串,只需要安装 Android 开发工具就可以让您的代码进行解密。
-
@AdamMihalcin 不,此字符串将用于加密,然后将结果发送到其他 Internet 服务。这有什么改变吗?
-
我同意,如果您使用 pswd/TAN 或类似的字符串,您可能想通过向手机发送一次性使用代码并使用这 - 每次用户想要访问时,他都会获得一个新的。 @Adam Mihalcin,你到底是什么意思?我知道有人可能会看代码,但是,调试加载的应用程序,这怎么可能?
-
@AdamMihalcin 再次编辑了答案。
-
@user387184 再次编辑答案。
标签: java android reverse-engineering secret-key