4

我目前有一个函数 [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

你确定它是 0x16 而不是 16?(我以为是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 回答