【问题标题】:Plain text encryption issues纯文本加密问题
【发布时间】:2017-06-08 11:38:34
【问题描述】:

我有一个用纯文本填充的数据库列。经理们认为将密码以纯文本形式存储在数据库中风险太大。所以问题是,我需要将该给定列中的所有值传输到加密文本,当然还需要修改 C# 中的业务逻辑。从知道程序应该从数据库中读取加密值,解密数据并使用它,当然如果新用户注册我需要将加密值存储在数据库中。 (但这不是问题。) 那么是否有一种适当且安全的方法来加密整个列(已作为纯文本使用)而不破坏软件的行为?

【问题讨论】:

  • 存储加密密码同样糟糕。您应该存储 hashed 密码:storing passwords in SQL Server
  • 使用 asp.net 中的 PasswordHasher 类生成输入密码的散列版本,而不是加密/解密密码。您还可以使用该类来验证密码,而无需再次生成完全相同的哈希。见这篇文章:PasswordHasher
  • 在本地更新你的代码,停止你的服务,散列该列中的所有密码(不要像上面所说的那样加密),将更新的代码发布到服务器,重新启动你的服务。
  • 您为什么要通过电子邮件向客户发送密码?不要那样做。如果他们忘记了密码,请让他们重置密码,不要通过电子邮件发送给他们......
  • @JacobH 很多年前我们离开了 Sprint,因为每次我们打电话给“客户服务”时,他们在验证后做的第一件事就是“提醒”我们的密码是什么。哎呀!

标签: c# sql-server encryption cryptography


【解决方案1】:

1) 创建新列,如hash_pwd

2) 用当前密码的哈希等效值填充它;

3) 将软件更改为使用哈希,而不是普通密码;

4) 使用纯密码删除或清除旧列。

PS:最好不要存储密码的简单哈希(MD5/SHA),而是添加静态字符串,如HASH( plain_password + "my_string" )。这将保护数据库免受哈希字典黑客攻击 - 例如如果我知道HASH( "123456" ) 的结果并且可以找到所有使用密码123456 的用户。

【讨论】:

  • 使用 MD5 或 SHA1 进行安全哈希根本不是一个好主意。使用强哈希算法,最好使用随机盐。
猜你喜欢
  • 1970-01-01
  • 2016-10-21
  • 2016-07-30
  • 1970-01-01
  • 2013-08-05
  • 1970-01-01
  • 1970-01-01
  • 2013-06-02
  • 2019-05-09
相关资源
最近更新 更多