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

前端之家收集整理的这篇文章主要介绍了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
            }
        }
    }
}

猜你在找的C#相关文章