在SHA1CryptoServiceProvider中处理撇号的问题

时间:2013-01-23 15:49:10

标签: c# .net sql encryption

我有一个SHA1CryptoServiceProvider对象,它使用ComputeHash方法创建密码:

private static byte[] GetSHA1(string userLogin, string userPassword)
{
    SHA1CryptoServiceProvider sha = new SHA1CryptoServiceProvider();
    return sha.ComputeHash(System.Text.Encoding.ASCII.GetBytes(userLogin + userPassword));
}

然后我得到byte [20]对象保存我的加密密码。我使用带参数的SqlCommand将它保存到数据库:

command.Parameters.AddWithValue("@usrPassword", securePassword);

将@usrPassword参数粘贴到SQL INSERT查询中。

当用户登录系统时,我从数据库中检索byte[20]对象,并将其与登录表单中提供的值进行比较。一切正常,除非用户在注册时使用撇号创建登录(如O'Hara)。由于某些奇怪的原因,数据库以byte[4]形式存储这些密码,因此它们不会通过比较,用户无法登录。

我认为SqlCommand只要在名称中保存带有撇号的用户时就会截断byte []对象的一部分,因为securePassword变量在注册时由byte [20]表示,但每当从数据库中检索相同的数据[4]。

我使用SQL Express 2008,密码字段属于varbinary(20)类型。

0 个答案:

没有答案