Android安全手册指出,将公钥(用于Android市场)仅作为字符串保存并不安全,应该以某种方式隐藏/编码。 请问有人可以提供一些示例吗?
(我没有单独的服务器,因此无法在那里存储)
更新。 相信,这是一个相当常见的任务,不仅与Android有关,而且与其他应用程序也有关。
Android安全手册指出,将公钥(用于Android市场)仅作为字符串保存并不安全,应该以某种方式隐藏/编码。 请问有人可以提供一些示例吗?
(我没有单独的服务器,因此无法在那里存储)
更新。 相信,这是一个相当常见的任务,不仅与Android有关,而且与其他应用程序也有关。
你所链接的页面中的相关文本如下:
重要提示:为了保护公钥不被恶意用户和黑客攻击,不要将公钥作为整个字符串嵌入代码中。相反,应该在运行时从各个部分构建字符串或使用位操作(例如与其他字符串进行异或运算)来隐藏实际密钥。密钥本身并不是机密信息,但您不希望让黑客或恶意用户轻易地替换公钥。
这就是你需要知道的全部内容。让别人知道你的公钥并没有什么危害,真正的危害在于有人会试图用自己的公钥替换你程序中的公钥,以此来转移应用内购买到他们自己的账户。
他们建议你将密钥存储在单独的部分中或者将密钥与其他字符串进行异或运算,以增加攻击者的难度。现在,攻击者不仅需要覆盖你的密钥,还需要找出你对字符串所做的变换,并使自己的密钥适应这种模式。这需要更多的工作量,可能会阻止一些普通的攻击者,但无法防止真正有决心的攻击者。
String base64EncodedPublicKey =“thisIsMyKey”;
,使用String one =“thisIs”; String two =“MyKey”; String base64EncodedPublicKey = one + two;
更安全吗? - Kalinahttp://developer.android.com/guide/publishing/app-signing.html
事实上,我相信Eclipse的Android插件甚至可以自动为您完成所有这些工作。在公钥上,您可以进行哈希处理并将其保存为哈希值。更好的做法是使用某些内容对哈希值进行加盐,以便在需要获取哈希值时您可以知道该内容。可能是用户名或ESN之类的内容。查看android.telephony.TelephonyManager.getDeviceId()。