【发布时间】:2017-06-08 11:38:34
【问题描述】:
我有一个用纯文本填充的数据库列。经理们认为将密码以纯文本形式存储在数据库中风险太大。所以问题是,我需要将该给定列中的所有值传输到加密文本,当然还需要修改 C# 中的业务逻辑。从知道程序应该从数据库中读取加密值,解密数据并使用它,当然如果新用户注册我需要将加密值存储在数据库中。 (但这不是问题。) 那么是否有一种适当且安全的方法来加密整个列(已作为纯文本使用)而不破坏软件的行为?
【问题讨论】:
-
存储加密密码同样糟糕。您应该存储 hashed 密码:storing passwords in SQL Server
-
使用 asp.net 中的
PasswordHasher类生成输入密码的散列版本,而不是加密/解密密码。您还可以使用该类来验证密码,而无需再次生成完全相同的哈希。见这篇文章:PasswordHasher -
在本地更新你的代码,停止你的服务,散列该列中的所有密码(不要像上面所说的那样加密),将更新的代码发布到服务器,重新启动你的服务。
-
您为什么要通过电子邮件向客户发送密码?不要那样做。如果他们忘记了密码,请让他们重置密码,不要通过电子邮件发送给他们......
-
@JacobH 很多年前我们离开了 Sprint,因为每次我们打电话给“客户服务”时,他们在验证后做的第一件事就是“提醒”我们的密码是什么。哎呀!
标签: c# sql-server encryption cryptography