C# 纯文本加密问题

C# 纯文本加密问题,c#,sql-server,encryption,cryptography,C#,Sql Server,Encryption,Cryptography,我有一个用纯文本填充的数据库列。经理们认为将密码以明文形式存储在数据库中风险太大。所以问题是,我需要将给定列中的所有值转换为加密文本,当然还要修改C#中的业务逻辑。从“知道”开始,程序应该从数据库中读取加密值,解密数据并使用它,当然,如果新用户注册,我需要将加密值存储在数据库中。(但这不是问题。) 那么,有没有一种合适且安全的方法可以在不破坏软件行为的情况下对整个列(已经作为纯文本使用)进行加密 1)创建新列,如hash_pwd 2) 用当前密码的哈希等价物填充它 3) 将软件更改为使用哈希,而

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

1)创建新列,如
hash_pwd

2) 用当前密码的哈希等价物填充它

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

4) 删除或清除带有普通密码的旧列


PS:最好不要存储密码的简单散列(MD5/SHA),而是添加静态字符串,如
散列(普通密码+“我的字符串”)
。这将保护数据库免受哈希字典黑客攻击-例如,如果我知道
哈希(“123456”)
的结果,并且可以找到使用密码
123456
的所有用户,那么存储加密密码同样不好。您应该存储散列密码:使用asp.net中的
PasswordHasher
类生成输入密码的散列版本,而不是加密/解密密码。您还可以使用该类验证密码,而无需再次生成完全相同的哈希。请参阅本文:在本地更新代码、停止服务、散列该列中的所有密码(不要如上所述进行加密)、将更新的代码发布到服务器、重新启动服务。为什么要通过电子邮件向客户发送密码?不要那样做。如果他们忘记了密码,让他们重新设置密码,不要发电子邮件给他们…@JacobH我们很多年前就离开了Sprint,因为每次我们打电话给“客户服务”,他们在验证后做的第一件事就是“提醒”我们密码是什么。哎呀!使用MD5或SHA1进行安全哈希根本不是一个好主意。使用强散列算法,最好使用随机盐。