当前位置:  开发笔记 > 数据库 > 正文

加密密码列

如何解决《加密密码列》经验,为你挑选了1个好方法。

我有一个看起来像这样的数据库表(简化):

CREATE TABLE  User 
(
     ID int, 
     UserName varchar(100), 
     password varchar(100), 
     primary key (ID)
)

我想加密password列.我已经研究过TDS(透明数据加密),看起来你可以在文件级加密数据库和列.

如果我使用这种方法,那么如果人们运行以下查询,他们会看到密码:

select password from [User]

该数据库在SQL Server 2012 Enterprise Edition上运行.



1> Ahsan Aziz A..:

您可以查看此链接,它可以帮助您开始正确的方向.

尽管如此,通常的做法是存储密码本身的哈希值,而不是密码的加密版本.散列将允许您检查用户是否输入了正确的密码(通过将数据库中的哈希值与用户输入的哈希值进行比较),而无需知道实际密码是什么.

这样做的好处是它通常更简单,更安全,因为您不需要加密/解密任何值.使用散列的缺点是你永远不能向用户发送他们的密码(如果你打算提供某种'忘记我的密码'功能),而是你必须将它重置为一个新的随机密码.

public string Encrypt(string plainText)
    {
        if (plainText == null) throw new ArgumentNullException("plainText");

        //encrypt data
        var data = Encoding.Unicode.GetBytes(plainText);
        byte[] encrypted = ProtectedData.Protect(data, null, Scope);

        //return as base64 string
        return Convert.ToBase64String(encrypted);
    }


public string Decrypt(string cipher)
    {
        if (cipher == null) throw new ArgumentNullException("cipher");

        //parse base64 string
        byte[] data = Convert.FromBase64String(cipher);

        //decrypt data
        byte[] decrypted = ProtectedData.Unprotect(data, null, Scope);
        return Encoding.Unicode.GetString(decrypted);
    }


如果用户忘记了密码,则不会将其发送给旧密码.
问题是不完整的,所以我只想指出一种加密的方法
推荐阅读
手机用户2502851955
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有