2

64 バイト (512 ビット) のソルトを生成するメソッドを取得しました。

public static string GenerateSalt()
{
    var rngCrypto = new RNGCryptoServiceProvider();
    byte[] saltBytes = new byte[64];
    rngCrypto.GetBytes(saltBytes);

    string result = Convert.ToBase64String(saltBytes);

    return result;
}

これは問題なく実行されているようですsaltBytes。bytearray のサイズは 64 バイトです。ただし、char(64)型付きの列で構成される MS SQL データベース テーブルに結果を入力できません。

私の仮定では、Convert.ToBase64String(saltBytes);私の側でメソッドに問題があると思いますが、これを改善する方法を知りたいです。簡単に実行するSystem.Text.ASCIIEncoding.Unicode.GetByteCount(secondSalt);と、文字列サイズが 64 バイトではなく 176 バイトであることがわかります。

4

2 に答える 2

3

バイト配列は、論理的には基数 256 の数値です。それを基数 64 の数値に変換すると、長くなります。16 進数の F0 を 2 進数の 1111111100000000 に変換するときと同じように、長くなります。

ソルトを人間が読める base-64 でエンコードされた文字列でデータベースに保存する場合は、64 個のシングルバイト文字よりもはるかに長くする必要があります。

ASCIIエンコーダーを介して実行することに関しては、ここで何をしようとしているのかわかりません。これは、テキスト以外のデータに対して行うのは奇妙なことのように思えます。説明できますか?

于 2013-04-10T22:20:44.357 に答える