有沒有什麼方法可以計算固定數組長度的Rijndael加密的最大結果?計算加密數據的最大大小
加密方法:RijndaelManaged的
填充:PKCS7
CipherMode:CBC
BLOCKSIZE 128
密鑰大小:128
予需要此作爲即時通訊轉換數據庫,在那裏所有的字符串將被加密,所以我需要改變所有字符串字段的大小。
有沒有什麼方法可以計算固定數組長度的Rijndael加密的最大結果?計算加密數據的最大大小
加密方法:RijndaelManaged的
填充:PKCS7
CipherMode:CBC
BLOCKSIZE 128
密鑰大小:128
予需要此作爲即時通訊轉換數據庫,在那裏所有的字符串將被加密,所以我需要改變所有字符串字段的大小。
你需要的一切嘗試了這一點:
public partial class Form1 : Form
{
private SymmetricAlgorithm mEncryptionType;
public Form1()
{
mEncryptionType = new RijndaelManaged();
mEncryptionType.Padding = PaddingMode.PKCS7; //PaddingMode.None;
mEncryptionType.Mode = CipherMode.CBC;
mEncryptionType.BlockSize = 128; // 192; // 256; // Update byte array to IV when changed
mEncryptionType.KeySize = 128; // 192; // 256; // Update byte array to Key when changed
mEncryptionType.IV = new byte[] { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F};
mEncryptionType.Key = new byte[] { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF };
int encrypted_size = CalculateEncryptedSize(new byte[] { 0x22, 0x23, 0x44 });
// Shows Theran's point about exact block size
encrypted_size = CalculateEncryptedSize(new byte[] { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF });
}
/// <summary>
/// Calculate the encrypted size of input buffer
/// </summary>
/// <param name="inputBuffer">The input buffer</param>
/// <returns>Size of the encrypted buffer</returns>
public int CalculateEncryptedSize(byte[] inputBuffer)
{
int extra_padding = 0;
if (mEncryptionType.Padding != PaddingMode.None)
{
int padding_size = (mEncryptionType.BlockSize/8);
extra_padding = (padding_size - (inputBuffer.Length % padding_size));
}
return inputBuffer.Length + extra_padding;
}
}
是的。將輸入大小舍入到塊大小的最接近的倍數(例如128/8 = 16字節)。
extraBytesNeeded = (16 - (inputSize % 16)) % 16;
maxSize = inputSize + extraBytesNeeded.
Jeff的答案几乎是正確的,只是PKCS7總是添加填充到消息,即使消息恰好塊的整數倍內適合。另外,不要忘記,如果使用IV也必須存儲的隨機IV。爲PKCS7填充消息的長度修正公式爲:
extraBytesNeeded = (16 - (inputSize % 16)); // whole block of padding if input fits exactly
maxSize = inputSize + extraBytesNeeded + IVbytes;
小心的第二個方程,不是每一種語言處理負數的模你假設的方式。例如,C/C++會在這些語言中給出錯誤答案(-a%b)== - (a%b)。 – Naaff 2009-06-17 13:33:43