填充字节[]到16字节倍数用于AES加密

时间:2009-07-17 18:06:32

标签: c# encryption bytearray aes

我目前有一个函数[C#],它接受一个byte []和一个对齐来设置它,但在加密过程中,偶尔会抛出一个错误。

    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加密期间内容大小无效的错误,表明它没有正确填充。

2 个答案:

答案 0 :(得分:10)

这是一个简单的解决方案:

private static void PadToMultipleOf(ref byte[] src, int pad)
{
    int len = (src.Length + pad - 1) / pad * pad;
    Array.Resize(ref src, len);
}

答案 1 :(得分: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);