微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 从表列读取二进制到byte []数组

我在我的应用程序中使用PBKDF2来存储用户密码.在我的Users表中,我有一个Salt和Password列,其确定方式如下:
// Hash the users password using PBKDF2
var DeriveBytes = new Rfc2898DeriveBytes(_Password,20);
byte[] _Salt = DeriveBytes.Salt;
byte[] _Key = DeriveBytes.GetBytes(20);  // _Key is put into the Password column

在我的登录页面上,我需要检索此盐和密码.因为它们是byte []数组,所以我将它们作为varbinary(MAX)存储在我的表中.现在我需要检索它们以与用户输入的密码进行比较.我怎么用sqlDataReader做到这一点?目前我有这个:

cn.open();
sqlCommand Command = new sqlCommand("SELECT Salt,Password FROM Users WHERE Email = @Email",cn);
Command.Parameters.Add("@Email",sqlDbType.NVarChar).Value = _Email;
sqlDataReader Reader = Command.ExecuteReader(CommandBehavior.CloseConnection);
Reader.Read();
if (Reader.HasRows)
{
    // This user exists,check their password with the one entered
    byte[] _Salt = Reader.GetBytes(0,_Salt,_Salt.Length);
}
else
{
    // No user with this email exists
    Feedback.Text = "No user with this email exists,check for typos or register";
}

但我知道这是错误的事实. Reader中的其他方法只有一个参数是要检索的列的索引.

谢谢!

解决方法

到目前为止,将它直接转换为byte []对我有用.
using (sqlConnection c = new sqlConnection("FOO"))
{
    c.open();
    String sql = @"
        SELECT Salt,Password 
        FROM Users 
        WHERE (Email = @Email)";
    using (sqlCommand cmd = new sqlCommand(sql,c))
    {
        cmd.Parameters.Add("@Email",sqlDbType.NVarChar).Value = _Email;
        using (sqlDataReader d = cmd.ExecuteReader())
        {
            if (d.Read())
            {
                byte[] salt = (byte[])d["Salt"];
                byte[] pass = (byte[])d["Password"];

                //Do stuff with salt and pass
            }
            else
            {
                // NO User with email exists
            }
        }
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐