4

私は現在、byte []とそれを設定するための配置をとる関数[C#]を持っていますが、暗号化中に時々エラーがスローされます。

    private byte[] AlignByteArray(byte[] content, int alignto)
    {
        long thelength = content.Length - 1;
        long remainder = 1;

        while (remainder != 0)
        {
            thelength += 1;
            remainder = thelength % alignto;
        }
        Array.Resize(ref content, (int)thelength);
        return content;
    }

関数に問題がある人はいますか?AES暗号化中にコンテンツサイズが無効であるというエラーが表示されます。これは、コンテンツサイズが正しくパディングされていないことを示しています。

4

2 に答える 2

10

簡単な解決策は次のとおりです。

private static void PadToMultipleOf(ref byte[] src, int pad)
{
    int len = (src.Length + pad - 1) / pad * pad;
    Array.Resize(ref src, len);
}
于 2009-07-17T18:16:29.840 に答える
2

16ではなく0x16でよろしいですか?(16だと思ったので、そうだと思います)。

編集:まともなコンパイラはすべてに変わるはず(x / 16)です(x >> 4)

int length = 16 * ((content.Length + 15) / 16);
Array.Resize(ref content, length);

編集2:汎用:

int length = alignment * ((content.Length + alignment - 1) / alignment);
Array.Resize(ref content, length);
于 2009-07-17T18:11:17.230 に答える