2012-02-14 4 views
0

데이터베이스에 비밀번호를 저장하기 위해 .Net 구현의 BCrypt를 사용하고 있습니다. 암호가 잘립니다, 일부 사용자의 경우데이터베이스에서 BCrypt 해시 된 암호가 잘림

Update [User] 
Set [Password]= @NewPassword, 
ModifiedOn = GetDate(), 
ModifiedBy = 'PasswordChanger' 
Where [UserName] = @UserName 

: 암호 컬럼은 VARCHAR (MAX)가

이 저장 프로 시저를 통해 암호를 업데이트하는 코드입니다. 절단 후 예는 다음과 같습니다. $ 2a $ 12 $ XM2

항상 그렇지는 않습니다.

잘라내기를 일으킬 수있는 점을 이해해 주시겠습니까?

는 UPDATE :

여기

암호를 업데이트 할 SP를 호출하는 C# 코드입니다 :

string HashedPassword; 
int NumberOfRowsAffected; 
try 
      { 
       Database jss = DatabaseFactory.CreateDatabase(); 
       HashedPassword = BCrypt.HashPassword(txtPassword.Text, BCrypt.GenerateSalt(12)); 
       NumberOfRowsAffected = jss.ExecuteNonQuery("procUpdatePassword", GetLogin(HttpContext.Current.User.Identity), HashedPassword); 
       if (NumberOfRowsAffected > 0) 
        lblStatus.Text = "Password updated."; 
       else 
       { 
        lblStatus.Text = "Password not updated for this user."; 
       } 

      } 
      catch (Exception ex) 
      { 
       lblStatus.Text = "Password was not changed due to an error."; 
       lblStatus.Text += ex.ToString(); 
      } 

답변

1
  1. 암호의 당신의 입력 매개 변수의 길이가 저장 프로 시저에서 사용되는 확인하시기 바랍니다 ...
  2. 데이터베이스 요청을 호출하기 전에 C# 함수에서 사용중인 암호의 매개 변수 길이를 확인하십시오.

마지막으로 양면이 테이블 스키마와 동기화되어야합니다.


샘플 코드 ...

using (SqlConnection con = new SqlConnection("Your Connection String")) 
{ 
    using (SqlCommand cmd = new SqlCommand("Your Stored Procedure Name", con)) 
    { 
     SqlParameter param = new SqlParameter(); 
     param.ParameterName = "Parameter Name"; 
     param.Value = "Value"; 
     param.SqlDbType = SqlDbType.VarChar; 
     param.Direction = ParameterDirection.Input; 
     cmd.Parameters.Add(param); 
     cmd.ExecuteNonQuery(); 
    } 
} 


- 명시 적으로 설정하지 않으면, 크기가 지정된 매개 변수 값의 실제 크기에서 유추됩니다.