首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >管理安全密码

管理安全密码
EN

Stack Overflow用户
提问于 2015-04-14 05:36:04
回答 2查看 342关注 0票数 1

我的程序请求一个密码并将其保存在文本文件中,下次我运行我的程序时,如果文本文件存在,它会询问密码,并将其与文本文件中的密码进行比较。

现在,在现实世界中,我知道没有使用文本文件,但我不知道如何改进我的技术,因为无论采用什么加密算法,文本文件对于每个人来说都是可读的,而其他解决方案作为注册表项是一样的。

这是一个练习,我的目的是学习如果我正在编写一个商业应用程序,那么我应该使用什么技术来存储具有更强安全性的密码呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-14 06:55:57

你把密码存放在哪里并不重要,只要你只存储一个散列。一个文本文件会做得很好,重要的是您使用一个带有成本因素的salt和一个缓慢的散列函数。像MD5或SHA*这样的算法不适合散列密码,因为它们太快了,因此太容易被强暴。

BCrypt.NET实现了BCrypt算法,该算法旨在对密码进行散列。它将自动添加加密安全盐,并将其包含在结果的BCrypt哈希中。

代码语言:javascript
复制
// 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有一个很好的代码示例

如果您对更详细的信息感兴趣,您可以看看我关于安全存储密码的教程。

票数 1
EN

Stack Overflow用户

发布于 2015-04-14 06:13:25

这样做的目的是加密或散列密码,但绝不解密密码。也就是说,你以一种不可逆的方式转换你的密码。

  • 当第一次输入密码时,您(一种方式)加密并存储密码。
  • 当用户尝试登录时,输入的密码将再次加密并与存储的密码进行比较。

这个回答中已经提供了一个代码示例

代码语言:javascript
复制
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“来防止这一点。表单详细信息见此回答

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29619858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档