배열 길이가 고정되어있는 Rijndael 암호화에서 가장 큰 결과를 계산할 방법이 있습니까?암호화 된 데이터의 최대 크기 계산
암호화 방법 : PKCS7
CipherMode :
패딩 것은 RijndaelManaged CBC를
블록 크기 128
으로 KeySize : 128
어디서 모든 문자열 데이터베이스를 변환 메신저로이 필요 그래서 나는 모든 문자열 필드의 크기를 변경해야 암호화됩니다.
배열 길이가 고정되어있는 Rijndael 암호화에서 가장 큰 결과를 계산할 방법이 있습니까?암호화 된 데이터의 최대 크기 계산
암호화 방법 : PKCS7
CipherMode :
패딩 것은 RijndaelManaged CBC를
블록 크기 128
으로 KeySize : 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 바이트). 그 PKCS7 항상 메시지가 정확하게 블록의 정수 내부에 맞는 경우에도 메시지에 패딩을 추가합니다 제외
extraBytesNeeded = (16 - (inputSize % 16)) % 16;
maxSize = inputSize + extraBytesNeeded.
제프의 대답은 거의 정확합니다. 또한 무작위 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
좋은 지적. 혼란을 피하기 위해 두 번째 파일을 삭제했습니다. –