ade*_*sin 5 java security encryption passwords desktop-application
我正在开发一个小型Java桌面应用程序,用于将用户密码存储在.db文件中.当用户创建新数据库时,用户必须为该数据库创建主密码,以便访问他们可能选择存储在其上的任何facebook或twitter密码.我的问题是,我应该在哪里以及如何安全地存储主密码?
我的想法是加密主密码并在存储之前添加盐,然后将密码存储在加密的文本文件或.db文件中,然后在用户尝试访问数据库时读取它.我只是在寻找关于这是一个好主意的指导,还是有更好的选择.
ps应用程序桌面应用程序而不是Web应用程序.
亲切的问候
存储密码的最安全方法是即使您(您的应用程序)也不知道密码是什么。这是通过使用单向哈希来完成的。顾名思义,这是一种方法,无法对散列值进行“反散列”并查看原始值是什么。
加密哈希的重要特征之一是,对值进行哈希处理将始终生成相同的哈希值。“快速棕色狐狸跳过懒狗”的 SHA-2 (256) 哈希值将始终生成哈希值d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592- 虽然有没有办法获取该哈希值并确定未哈希值是什么,拥有彩虹表的黑客可以看到它对应的内容(这就是为什么弱密码,即使经过哈希处理仍然容易受到攻击,世界上的每个彩虹表都会有123456的哈希值)。
因此,在对密码进行哈希处理之前,我们添加一个盐(最好为每个用户添加不同的盐)。如果在散列“The Quick Brown Fox Jumps Over the Lazy Dog”之前,我们添加盐(让我们仅使用“盐”这个词作为一个简单的例子),我们现在将散列“SaltThe Quick Brown Fox Jumps Over the Lazy Dog”并得到b369837c6389d8dddb06cb669961b0ab80f5166cc8cebcfaf9734ed009c31e8b:我们的哈希值。
加盐哈希是您应该存储的内容(但是/只要对您的应用程序有意义)并进行检查。因此,当用户首次创建帐户时,您将:
当用户尝试登录时,您将:
如果不相同,则他们输入了错误的密码,如果相同,您就知道他们输入了正确的密码,您可以登录他们。