0

メソッドを使用してパスワードを作成するオブジェクト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)タイプです。

4

0 に答える 0