3

長さ 16の を作成する必要がありますbyte[](AES 暗号化でキーとして使用される 128 ビットのバイト配列)。

以下は有効な文字列です

"AAECAwQFBgcICQoLDA0ODw=="

文字列が 128 ビットかどうかを判断するアルゴリズムは何ですか? それとも、そのような 128 ビット文字列を作成する唯一の方法は試行錯誤ですか?

コード

    static void Main(string[] args)
    {
        string firstString = "AAECAwQFBgcICQoLDA0ODw=="; //String Length = 24
        string secondString = "ABCDEFGHIJKLMNOPQRSTUVWX"; //String Length = 24
        int test = secondString.Length;

        byte[] firstByteArray = Convert.FromBase64String((firstString));
        byte[] secondByteArray = Convert.FromBase64String((secondString));

        int firstLength = firstByteArray.Length;
        int secondLength = secondByteArray.Length;


        Console.WriteLine("First Length: " + firstLength.ToString());
        Console.WriteLine("Second Length: " + secondLength.ToString());

        Console.ReadLine();
    }

調査結果:

256 ビットの場合、256/6 = 42.66 文字が必要です。これは 43 文字に丸められます。【4足すれば割り切れる=

512 ビットの場合、512/6 = 85.33 文字が必要です。これは 86 文字に丸められます。【4足すれば割り切れる==

128 ビットの場合、128/6 = 21.33 文字が必要です。これは 22 文字に丸められます。【4足すれば割り切れる==

4

3 に答える 3

6

16バイトのbase64文字列は常に24文字==で、末尾にパディングがあります。

(少なくとも、.NETメソッドを使用してデコードできる場合。パディングはbase64文字列のすべての使用に含まれるとは限りませんが、.NET実装では必要です。)

于 2013-02-19T09:43:24.143 に答える
3

Base64 エンコーディングでは、「=」は Base64 文字列の末尾に追加される特別な記号であり、元の値にこれらの文字のデータがないことを示します。

各文字は元の 6 ビットのデータに等しいため、8 ビットの値を生成するには、文字列の長さが 4 で割り切れる必要があります。(6 ビット * 4 = 8 ビット * 3)。結果の BASE64 文字列が 4n より短い場合、有効にするために末尾に「=」が追加されます。

アップデート

「==」の前の最後の文字は 2 ビットの情報のみをエンコードするため、可能なすべての Base64 文字に置き換えると、64 の可能な組み合わせのうち 4 つの異なるキーのみが得られます。つまり、"bbbbbbbbbbbbbbbbbbbbbb==" ('b' は有効な Base64 文字) の形式で文字列を生成すると、一意のキーごとに 15 個の重複キーが得られます。

于 2013-02-19T09:47:44.887 に答える
0

PadRight() を使用して、文字列の末尾に char を埋め込むことができます。この文字は後で復号化して削除します。

于 2013-02-19T09:41:02.807 に答える