我的程序请求一个密码并将其保存在文本文件中,下次我运行我的程序时,如果文本文件存在,它会询问密码,并将其与文本文件中的密码进行比较。
现在,在现实世界中,我知道没有使用文本文件,但我不知道如何改进我的技术,因为无论采用什么加密算法,文本文件对于每个人来说都是可读的,而其他解决方案作为注册表项是一样的。
这是一个练习,我的目的是学习如果我正在编写一个商业应用程序,那么我应该使用什么技术来存储具有更强安全性的密码呢?
发布于 2015-04-14 06:55:57
你把密码存放在哪里并不重要,只要你只存储一个散列。一个文本文件会做得很好,重要的是您使用一个带有成本因素的salt和一个缓慢的散列函数。像MD5或SHA*这样的算法不适合散列密码,因为它们太快了,因此太容易被强暴。
库BCrypt.NET实现了BCrypt算法,该算法旨在对密码进行散列。它将自动添加加密安全盐,并将其包含在结果的BCrypt哈希中。
// Hash a new password for storing in the database.
// The function automatically generates a cryptographically safe salt.
string hashToStoreInDb = BCrypt.HashPassword(password);
// Check if the hash of the entered login password, matches the stored hash.
// The salt and the cost factor will be extracted from existingHashFromDb.
bool isPasswordCorrect = BCrypt.Verify(password, existingHashFromDb);另一个好的算法是PBKDF2,crackstation.net有一个很好的代码示例。
如果您对更详细的信息感兴趣,您可以看看我关于安全存储密码的教程。
发布于 2015-04-14 06:13:25
这样做的目的是加密或散列密码,但绝不解密密码。也就是说,你以一种不可逆的方式转换你的密码。
这个回答中已经提供了一个代码示例
byte[] data = System.Text.Encoding.ASCII.GetBytes(inputString);
data = new System.Security.Cryptography.SHA256Managed().ComputeHash(data);
String hash = System.Text.Encoding.ASCII.GetString(data);您的程序将存储/比较哈希值,而不是普通密码。
该代码可以而且应该得到进一步批准。攻击者可以创建大型字典/彩虹表的加密密码,并使用它们作为查找密码破解。可以通过在要加密的密码中添加一些"salt“来防止这一点。表单详细信息见此回答。
https://stackoverflow.com/questions/29619858
复制相似问题