2011-11-30 3 views
1

호 AES256 암호화 된 파일/버퍼의 크기를 계산합니까?AES256 암호화 된 "버퍼"의 크기를 미리 계산하십시오.

(n + AES_BLOCK_SIZE -1) 바이트의 malloc을 수행합니다 (n은 암호화되지 않은 버퍼 크기 임).

그러나 암호화 된 버퍼의 크기는 항상 해당 크기가됩니까? 또한 "더 작을 수 있습니까?"

정확한 아이디어를 미리 계산하는 방법에 대해 알고 싶습니다.

감사합니다.

답변

3

사용중인 패딩에 따라 다릅니다. 가장 일반적인 패딩 방식 (되돌릴 수 있고 약간의 무결성 검사 포함)은 PKCS # 5 패딩입니다. 이것은 최종 크기가 블록 크기의 배수가되도록 바이트 수를 추가하고 적어도 하나의 바이트가 추가됩니다 . (추가 된 각 바이트는 첨부 된 바이트 수와 동일한 값을가집니다.)

Ie. 최대 하나의 전체 블록 (AES의 경우 16 바이트)이 추가됩니다.

n + AES_BLOCK_SIZE은 항상 충분하지만 (경우에 따라서는 충분 함) 더 정확하게는 n + AES_BLOCK_SIZE - (n % AES_BLOCK_SIZE)으로 계산할 수 있습니다.

CTR, CFB 및 OFB 모드와 같이 패딩을 전혀 필요로하지 않는 일부 작동 모드가 있습니다. 또한 초기화 벡터 (다른 전체 블록)를 전송하려는 경우가 있습니다.

1

AES는 "블록"암호화입니다. 128 비트 블록 크기입니다. 즉, 항상 입력으로 128 비트 블록 (16 바이트)을 가져 오며 항상 동일한 크기의 블록을 출력합니다.

입력 값이 16 바이트의 배수가 아닌 경우 값을 0으로하는 데이터를 추가해야합니다.

데이터가 16 바이트 이상인 경우 여러 블록을 암호화하므로 입력 블록을 보유한 횟수만큼 AES 암호화 기능을 호출해야합니다.

출력을위한 공간 만 할당하는 경우 malloc(AES_BLOCK_SIZE);이 할당량입니다. 입력 크기를 추가하거나 1 바이트를 뺍니다.

관련 문제