メソッドを使用してパスワードを作成するオブジェクト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]
形式で保存するため、比較に合格せず、ユーザーはログインできません。
登録中の変数はbyte [20]で表されるSqlCommand
ため、名前にアポストロフィを付けてユーザーを保存するたびにbyte []オブジェクトの一部を切り取るように見えますが、データベースから同じデータが取得されるたびにbyte [4]。securePassword
私は SQL Express 2008 を使用しており、パスワード フィールドはvarbinary(20)
タイプです。