2009-07-17 128 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); 
相關問題