我目前有一个函数[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加密期间内容大小无效的错误,表明它没有正确填充。
答案 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);