VB -哈希注册数据离线授权



我有一个vb应用程序,我使用一个在线mysql数据库的用户访问。在线数据库有用户名、密码,然后是一堆个位数(基本上是yes/no)字段,用于确定用户被允许访问哪些项目。当用户登录时,数据库检索所有的"是"答案并启用这些按钮,检索所有的"否"答案并禁用这些按钮。

我的问题是有一个很好的可能性,任何给定的用户将不在线。所以我想到将在线数据库复制到本地设备上(这个程序将在windows平板电脑上运行,这些平板电脑可能有也可能没有互联网——可能永远不会有互联网连接)。这就足够了,除非用户可能使用不同的平板电脑,而该设备不知道用户被允许访问什么(基于缺乏互联网连接)。

所以我的新方法是当用户注册时,让他们提供名字、姓氏、电话号码和电子邮件地址。在这个时候,我还会选择他们有权使用哪些按钮。我想将所有这些信息放入代码(可能是散列)中,以便下次用户登录(在线或离线)时,他们将使用自己的名、姓和生成的代码。用户甚至可以切换到不同的设备,得到同样的结果。我希望这是有意义的。

所以基本上我正在寻找一种方法(我很确定涉及哈希),允许用户注册一些信息,接收一个将其绑定在一起的代码,然后登录到任何正在运行我的程序的windows平板电脑,而无需设备在线下载新的授权用户列表。

散列是您正在考虑的部分,但不是全部。散列的一个关键部分是它是不可逆转的,因此您不能单独使用散列来传递信息,例如启用/禁用哪些按钮。听起来好像你还需要在系统的其他地方实现散列(永远不要存储未散列的密码!)这个问题剩下的需要的是安全校验码。

这个想法是,你生成一个数字与几个孔/空的空间,其中数字的不同部分有不同的含义。它可能看起来像:

4325 _-23r3_-f257_-d982_ - _ _

其中一些字符是用户信息的散列,其他字符的位对应于您的Yes/No数据库字段。一旦有了这些,您就有了一个算法(使用安全密钥),该算法计算哪些字符属于缺失的空格,然后您可以向用户发出最终的数字。您的软件将获取用户输入的数字,并检查以确保它得到的校验数字与输入的校验数字相匹配。

这种方法有一个缺点。允许离线激活意味着包括包含用于计算产品校验数字的密钥,并且与任何数字安全一样,一旦您将这种东西放在野外,黑客能够找到方法获得它。


现在让我们继续讨论当前代码中巨大的安全漏洞。您声明数据库存储了用户名和密码。我希望你只是简化事情,但这是一个巨大的问题,在这一点上,我不能在良心上不受挑战。您不应该存储实际的密码,而应该对密码进行散列处理,并只存储散列结果。当有人想要登录时,您对他们尝试使用的密码进行散列并比较这些散列。这是一个大问题,如果你不这样做,你做错了

这也有点过于简化了。您还需要在散列之前对密码进行盐处理,以帮助阻止对常见散列结果的字典攻击。此外,散列算法的选择也很重要。Md5在这里无法切割。您最好的选择是bcrypt或script,但如果您确实需要,您现在可以使用sha1。

这里要知道的最重要的事情是,您应该永远不要尝试构建自己的身份验证系统。它很容易接近并通过你所有的测试,但在某些微妙的方面仍然是错误的,直到一年后你发现你在六个月前被黑客入侵时才会知道。相反,为现有平台寻找预先编写的组件或产品来处理此问题。尽可能多地依赖于这个领域的项目(和程序员)的代码。

最新更新