2009-07-17 78 views
3

我目前有一个函数[C#]需要一个字节[]和一个对齐来设置它,但是在加密期间,每隔一段时间就会抛出一个错误。为AES加密填充字节[]为16字节倍数

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加密过程中内容大小无效的错误,提示它不是正确的填充。

+1

我不认为你想要的 “对齐”。你在说什么是填充。 – Cheeso 2009-07-17 18:42:36

回答

10

这里有一个简单的解决方案:

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

我想你会想要返回src或通过参考src。 – TrueWill 2014-05-27 22:44:43

1

你确定它是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); 
相关问题