0

少し暗号化を行う方法がいくつかあり、\n比較している値に常に追加されます。

これは改行文字のせいでしょうか?

public static class Security
{
    public static string CreateHash(this string unHashed)
    {
        SHA256CryptoServiceProvider x = new SHA256CryptoServiceProvider();
        byte[] data = Encoding.UTF8.GetBytes(unHashed);
        data = x.ComputeHash(data);
        return Encoding.UTF8.GetString(data);
    }

    public static bool MatchHash(this string hashData, string hashUser)
    {
        if (hashUser == hashData)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}

あるテキスト ボックスに値を入力し、別のテキスト ボックスに値を入力するために を実行していCreateHash()ます (すべてテスト用です)。次に、別のテキスト ボックスから比較チェックを実行します。

protected void btn_dehash_Click(object sender, EventArgs e)
{
// get value entered and hash it
var matchPass = txt_password.Text.CreateHash();

// populate lbl with true or false
lbl_Name.Text = txt_hashed.Text.MatchHash(matchPass) ? "true" : "false";
}

私が得た結果MD5は問題なく、これははるかに短いため機能します。より安全な方法を使用したいので、SHA256 を使用しました。これが比較から得た結果です。

SHA256 の結果

なぜこれが起こっているのか誰にも分かりますか?

4

1 に答える 1

5

ハッシュを文字列に変換しないでください! バイト配列として保持します。

ハッシュは、UTF-8 として有効である場合と有効でない場合がある一連のバイトを表します。

読み取り可能なハッシュが必要な場合は、次のようにします。

    byte[] hash = x.ComputeHash(bytes);
    string hashString = string.Empty;
    foreach (byte x in hash)
    {
        // Turn each byte into it's hex equivalent (00 to FF).
        hashString += String.Format("{0:x2}", x);
    }
    return hashString;

または、コメントが示唆するように、base 64 エンコーディングを使用します。

于 2013-07-02T10:15:37.660 に答える