0

大学に向けて完成させようとしているプロジェクトにセキュリティを適用しようとしています。このセキュリティは一見しただけなので、私はあきらめて、パスワードをプレーンテキストとして保存するか、base64 に変換して、よりユーザーにとってわかりやすいことをしたくなります。

諦める前に、SOに聞いてみます。ここで質問するのは初めてなので、お手柔らかにお願いします。

この MSDN コードの実装はそれほど難しくないと判断しました。 http://msdn.microsoft.com/en-us/library/aa545602%28v=cs.70%29.aspx

結局のところ、それは本当にそうです。エラーが発生します

System.FormatException: 入力文字列が正しい形式ではありませんでした。

コード用

binarySaltValue[0] = byte.Parse( salt.Substring( 0, 2 ), System.Globalization.NumberStyles.HexNumber, CultureInfo.InvariantCulture.NumberFormat );

正直に言うと、私はこのコードを完全には理解していません。

  1. SaltValueSize はどうあるべきですか? 提供されたコードはそれを提供しません。また、参照も提供しません。また、大文字になっているので、オブジェクトですか?それとも、どこかのオブジェクトのフィールドですか?
  2. 変数「hash」はどこにも定義されていないため、new MD5CryptoServiceProvider() で埋めただけです。これは間違いですか?
  3. 私が正しく読んでいる場合、文字列「salt」はバイナリを保持するはずですが、実行時にはそうではなく、文字化けしています。その間、すべてがクラッシュした行は「salt」からバイナリを解析しようとしていますか? なんで?

誰かがこれを修正したり、馬鹿げた非同期ハッシュクラスを提供したりできるなら、私はそれを感謝します.

(ランダムなユーザー名で申し訳ありません。どうしてそうなったのかわかりません)

4

1 に答える 1

1

少なくとも開始するための基本的な方法 (ソルトなし) を次に示します。入ってくる文字列を「ハッシュ」するだけです。

    private string GetHashedString(string _PW)
    {
        string _HashedPW = "";
        SHA512 sha = new SHA512CryptoServiceProvider();
        byte[] result;
        StringBuilder strBuilder = new StringBuilder();


        sha.ComputeHash(ASCIIEncoding.ASCII.GetBytes(_PW));
        result = sha.Hash;

        for (int i = 0; i < result.Length; i++)
        {
            strBuilder.Append(result[i].ToString("x2"));
        }

        _HashedPW = strBuilder.ToString();
        return _HashedPW;
    }
于 2013-11-13T21:16:51.277 に答える