保持哈希值隐藏

时间:2016-01-11 23:25:19

标签: java android security hash cryptography

我正在开发一个Android应用程序,它与我开发的REST API进行通信。 REST API托管在一个单独的服务器上,应用程序将在端点处发送以发送&收到信息。

出于授权目的,每当应用程序触及端点时,请求还必须包含用户的密钥和哈希。密钥是从第三方服务接收的公共号码,哈希是我实际需要实现的。

因为Android可以很容易地被反编译和读取,所以我需要一种实际生成哈希的方法,但是不要将它隐藏起来。我知道混淆代码不会隐藏字符串,所以我不能在应用程序中放置任何密钥。我还考虑过通过REST API生成哈希,但这仍然允许其他人访问它。

我的想法已经不多了,出于明显的安全原因,这是应用程序中最重要的部分之一。任何建议都会非常有用。

编辑:我将提供更多信息,以帮助您了解应用程序的工作原理。我的应用程序要求用户使用Facebook登录,以便(通常)提供合法信息。我使用Facebook用户的ID作为公钥,我计划使用单独的哈希值来保密他们的帐户。问题是我没有从用户那里获得独特的价值,因为提供的唯一信息是通过Facebook。我无法将硬件信息用作唯一值,因为它们将来可能始终更改其设备。对于那些使用Tinder或看过Tinder功能的人,他们只需要您使用Facebook登录。我的目标是拥有相同的功能。我宁愿在登记/登录时不必向他们询问任何信息。

2 个答案:

答案 0 :(得分:0)

因此,经过几个小时的思考和重新规划身份验证和安全系统后,我决定使用Facebook SDK为每个登录的用户接收唯一值。我不知道为什么我没有想到它以前,它一直坐在我面前,但我决定使用Facebook的访问令牌系统作为身份验证的手段。

当用户第一次登录Facebook时,Facebook会生成长度为72个字符的访问令牌,我相信。我将此访问令牌与用户ID一起发送到我的Rest API,后者使用用户访问令牌向Facebook发送请求。此请求检查访问令牌是否有效,如果是,则返回与之关联的用户ID。我使用该ID来匹配原始请求中给出的用户ID,如果它们匹配,则授权用户并允许他们使用API​​。

答案 1 :(得分:-2)

您可以尝试通过API生成哈希值,然后使用Android Keystore API在本地存储。这应该提供相当合理的安全性 - 尽管如果有人想要获得特定的哈希,他们可能会这样做。但至少他们不会有实际的算法。