관리 메뉴

솜씨좋은장씨

[Python] ValueError: Input strings must be a multiple of 16 in length 원인과 해결방안 본문

Programming/Python

[Python] ValueError: Input strings must be a multiple of 16 in length 원인과 해결방안

솜씨좋은장씨 2020. 4. 7. 10:56
728x90
반응형

파이썬을 여행하는 히치하이커를 위한 안내서에 나온 PyCrpyto 코드를 실습하다가

다음의 오류를 만나게 되었습니다.

 

실습 코드

from Crypto.Cipher import AES

encryption_suite = AES.new('This is a key123', AES.MODE_CBC, 'This is an IV456')

chiper_text = encryption_suite.encrypt("aaaaaaaaaaaaaaaaa")

decryption_suite = AES.new('This is a key123', AES.MODE_CBC, 'This is an IV456')

plain_text = decryption_suite.decrypt(chiper_text)

Error

... 생략
ValueError: Input strings must be a multiple of 16 in length

 

원인

원인은 입력되는 문자열의 길이가 16의 배수를 만족하지 못하기 때문입니다.

 

입력되는 문자열의 길이가 16배수여야 하는 이유는

AES의 CBC방식은 암호화할 대상인 평문을 16바이트씩 끊어 사용하기 때문입니다.

 

만약 a가 16번 반복되는 

"AAAAAAAAAAAAAAAA"

이 문자열을 넣었을때는 오류가 나지 않지만

 

a가 15번 혹은 17번 반복되는 문자열을 넣었을때는 해당 오류가 발생하게 됩니다.

 

해결방안

입력하는 문자열의 길이가 16의 배수인지 확인해보고 그렇지 않다면 길이가 16의 배수가 되도록

수정을 해주면됩니다.

 

참고 링크

 

AES 암호화에 대해 with Python(파이썬)

# AES 암호화 하는 방법에 대한 간단한 설명을 하고자 한다. # 아래 설명하는 코드는 파이썬이지만, 언어의 종류는 별로 중요하지 않다. # AES-128bit, 192bit, 256bit.. 가 있으며 이것은 key 즉 패스워드의 길이..

devst.tistory.com

 

Comments