1

サポートが必要なプログラムを継承しましたが、パスワードは SHA1 ハッシュを使用して MSSQL データベースに保存されていると言われました。データベースからデータを読み込もうとすると、「System.Byte[]」しか得られません。

プログラムはユーザーにパスワードを要求し、次を使用して SHA1 ハッシュを作成できます。

Public Function GetSHA1HashData(data As String) As String

        Dim cBase64 As String
        Dim objSHA1 As New SHA1CryptoServiceProvider()
        Dim abBytesToHash() As Byte
        Dim cHash As String

        cBase64 = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(data))
        abBytesToHash = System.Text.Encoding.ASCII.GetBytes(cBase64)
        cHash = BitConverter.ToString(objSHA1.ComputeHash(abBytesToHash))
        cHash = Replace(cHash, "-", "")

        Return cHash

End Function

だから私の質問は、新しく作成されたハッシュとデータベースから引き出した値を比較して、それらが同じかどうかを確認するにはどうすればよいですか? 「System.Byte[]」を読み取れるようにするには、どうすればよいですか?

ありがとう。

4

1 に答える 1

1

関数を使用して SHA-1 ハッシュを作成することはできますが、データベースに値を入力した人物が同じ関数を使用したかどうかは疑問です。現在、文字エンコーディングを取得するためだけに、すでに文字列であるデータを base 64 エンコーディングしています。その人は単純に文字エンコーディングを直接取得し (ここでは UTF-8 だと思います)、SHA-1 値を計算した可能性が高くなります

Public Function GetSHA1HashData(data As String) As Byte()
    Dim objSHA1 As New SHA1CryptoServiceProvider()
    return objSHA1.ComputeHash(System.Text.Encoding.UTF8.GetBytes(data));
End Function

これで、データベースからのバイト配列と、ユーザーのパスワードから計算されたバイト配列が得られます。これらのバイト配列を直接比較できます。幸いなことに、StackOverflow と Jon Skeet に頼って、これを行う方法について既に答えを得ることができます。

于 2013-08-24T19:38:49.400 に答える