본문 바로가기
관련_배경_지식

암/복호화시 "Given final block not properly padded" 에러

by Lcoding 2024. 11. 11.
반응형

안녕하세요,

 

오늘은 암/복호화시 발생하는  "Given final block not properly padded" 에러에 대하여 알아보겠습니다.

 

얼마전 프로젝트에서 파일 다운로드시 "Given final block not properly padded" 에러가 발생하는 사건이 있었습니다.

 

 

"Given final block not properly padded" 에러란?

 

주로 암호화 또는 복호화 작업 중 패딩이 올바르지 않아서 발생하는 오류입니다. 이 에러는 블록 암호화 모드에서 주로 발생하며, 특히 AES(Advanced Encryption Standard) 또는 DES(Data Encryption Standard) 같은 알고리즘을 사용할 때 자주 나타납니다.

 

에러 원인

블록 암호화 알고리즘은 데이터를 고정된 크기의 블록으로 나눠서 처리합니다. 데이터가 블록의 크기와 일치하지 않는 경우, 마지막 블록은 패딩(padding)을 통해 크기를 맞추게 됩니다. 패딩이란 마지막 블록을 채워서 블록 크기와 동일하게 만드는 방법입니다.

하지만, 복호화(decryption) 과정에서 패딩이 올바르지 않거나 잘못된 방식으로 적용되면, 이 에러가 발생할 수 있습니다. 이 오류의 일반적인 원인은 다음과 같습니다:

  1. 잘못된 암호화/복호화 키: 암호화에 사용된 키와 복호화에 사용된 키가 다를 경우 발생할 수 있습니다.
  2. 패딩 방식 불일치: 암호화와 복호화에서 사용하는 패딩 방식이 다를 경우, 패딩을 제거하는 과정에서 문제가 발생할 수 있습니다.
  3. 데이터 손상: 암호화된 데이터가 전송 중 손상되었거나 수정되었을 경우, 마지막 블록이 손상되어 패딩이 잘못된 것처럼 인식될 수 있습니다.
  4. 잘못된 블록 크기: 데이터가 잘못된 블록 크기로 암호화되었거나 패딩되지 않았을 경우 발생할 수 있습니다.

해결 방법

1. 암호화 및 복호화 시 동일한 패딩 및 모드 설정

암호화와 복호화에서 동일한 암호화 알고리즘, 모드, 패딩 방식을 사용해야 합니다. 예를 들어, AES 알고리즘을 사용할 때는 CBC 모드와 PKCS5Padding 패딩 방식을 일관되게 사용하는지 확인하세요.

 

2. NoPadding 사용 시 데이터 길이 확인

만약 NoPadding을 사용하는 경우, 데이터의 길이가 블록 크기(예: AES의 경우 16바이트)의 배수여야 합니다. 그렇지 않으면 패딩 오류가 발생할 수 있습니다.

 

3. 잘못된 키 확인

암호화와 복호화에 사용하는 가 동일한지 확인해야 합니다. 키가 잘못되면 복호화 중 패딩 오류가 발생할 수 있습니다.

 

4. 데이터가 손상되지 않았는지 확인

암호화된 데이터가 전송 중에 손상되지 않았는지 확인합니다. 전송 중 데이터가 변형되면 복호화 시 패딩 오류가 발생할 수 있습니다. 이를 방지하기 위해 무결성 체크(예: HMAC) 같은 방법을 사용할 수 있습니다.

 

5. Base64 인코딩/디코딩 사용

암호화된 데이터를 문자열로 전송하거나 저장할 때, 이를 Base64로 인코딩/디코딩하는 과정에서 오류가 발생할 수 있습니다. 암호화된 바이트 배열을 Base64로 인코딩하고, 복호화 전에 다시 Base64로 디코딩하는 방식이 일반적입니다.

 

이 에러가 발생할 때는 위와 같은 요소들을 하나씩 점검해보는 것이 중요합니다.

 

저의 경우는 리눅스서버에서 암복호화하는 주체의 계정이 변경되면서 알고리즘이 변경된 사항이었기에 계정을 기존대로 원복하면서 조치를 완료하였습니다.   

 
반응형

loading