【发布时间】:2014-08-05 04:42:09
【问题描述】:
我正在开发一个同时具有 Web 和移动 Java 界面的应用程序。 Web 只是一个“旁观者”,因此不能以任何方式改变数据库。另一方面,java 接口可以(而且经常这样做)。我不想使用自签名证书,所以我想出了这个解决方案。我想问的是它是否可以被认为是安全的,或者是否有更好、更有效的方法来做到这一点。我是一个有点偏执的人,所以请考虑到这一点。
当安卓设备注册自己时,我将密码保存为 sha256(pass + pass)。这是唯一一次设备必须以纯文本形式发送密码。这个函数产生我称之为 [hash] 的东西,并将存储在我的数据库中。
登录时,设备会发送 sha256([hash] + unixTime) 创建的新哈希以及 unixTime。我需要使用 [hash],否则我将无法验证密码。服务器将尝试重现该功能的产品,如果成功,则验证用户。发送的 unixTime 之后会被插入到数据库中,所以我也可以检查一下,这个时间是否还没有被使用(如果 unixTime 小于或等于保存,因此伪造/来自过去,我可以安全地将其丢弃为无效)
同样,所有其他需要身份验证的数据包都将以这种方式进行验证(因此每个数据包 = 新哈希)
注意:所有哈希都转换为十六进制,只是为了节省一些位。
【问题讨论】: