윈도우 커맨드 창에서 pycryptodome 모듈을 import한다.
pip install pycryptodome

Successfully installed pycryptodome-3.23.0
→ 설치가 성공적으로 되었음을 확인할 수 있다.

파이썬 쉘 창에서 import Crypto 명령을 적었을 때 성공적으로 모듈이 호출됨을 확인
from Crypto.Cipher import AES
from Crypto.Hash import SHA256 as SHA
class myAES():
def __init__(self, keytext, ivtext):
hash = SHA.new()
hash.update(keytext.encode('utf-8'))
key=hash.digest()
self.key = key[:16]
hash.update(ivtext.encode('utf-8'))
iv=hash.digest()
self.iv=iv[:16]
def makeEnabled(self, plaintext):
fillersize = 0
textsize = len(plaintext)
if textsize%16 != 0:
fillersize = 16-textsize%16
filler = '0'*fillersize
header = '%d' % (fillersize)
gap = 16-len(header)
header += '#'*gap
return header+plaintext+filler
def enc(self, plaintext):
plaintext = self.makeEnabled(plaintext)
aes = AES.new(self.key, AES.MODE_CBC, self.iv)
encmsg = aes.encrypt(plaintext.encode())
return encmsg
def dec(self, ciphertext):
aes = AES.new(self.key, AES.MODE_CBC, self.iv)
decmsg = aes.decrypt(ciphertext)
header = decmsg [:16].decode()
fillersize = int(header.split('#')[0])
if fillersize != 0:
decmsg = decmsg[16:-fillersize]
return decmsg
def main():
keytext = 'samsjang'
ivtext = '1234'
msg = 'python3x'
myCipher = myAES(keytext, ivtext)
ciphered = myCipher.enc(msg)
deciphered = myCipher.dec(ciphered)
print('ORIGINAL:\t%s'%msg)
print('CIPHERED:\t%s'%ciphered)
print('DECIPHERED:\t%s'%deciphered)
if __name__ == '__main__':
main()
단문 메시지를 읽고 AES CBC 모드로 암호화 및 복호화 하는 프로그램이다.
메시지 길이에 상관없이 암호화가 가능하도록 메시지 길이를 16바이트 배수로 만들고 이에 대한 헤더 정보를 포함해 암호화 진행
복호화를 수행하면 원래 메시지로 복원된다.
<주요 코드 간단한 설명>
AES는 블록 암호 방식 중 하나로, 키(key)와 초기화 벡터(IV)가 필요하다
보안 강화를 위해 keytext(텍스트로 된 키)와 iv(텍스트로 된 초기벡터)를 해시(hash)로 변환한 뒤 암호화/복호화에 사용한다.
class myAES:
myAES는 AES 암호 복호화를 담당하는 사용자 정의 클래스
객체지향 언어에서 클래스는 관련 기능을 하나의 단위로 묶을 수 있다.
__init__(keytext, ivtext):
keytext와 ivtext를 SHA-256 해시로 변환 한다.
각각의 해시값에서 앞 16바이트 AES키와 IV로 사용
makeEnabled(plaintext):
16바이트 블록 단위를 맞추기 위해 헤더 + 패딩(0) 추가
enc(plain):
평문->makeEnabled() 처리 후 AES CBC 모드로 암호화, 바이트 형식의 암호문 반환
main():
myAES 객체 생성
메시지 암호 복호화 실행 후 결과 출력
코드 작성 후 돌려보니 에러가 났다
계속 에러 검색하고 읽어보던 중 처음 cmd창에서 모듈 설치하고 notice에 적혀있는 얘기를 이제야 읽었다

파이썬 업데이트 하고 다시 돌리니 정상적으로 AES 알고리즘 암호 복호화가 진행됨을 확인했다

'Computer Science > language' 카테고리의 다른 글
| [assembly] Assembly 함수, 시스템 콜 정리 (0) | 2025.05.25 |
|---|---|
| [language] 객체지향 언어와 클래스의 개념 (2) | 2025.05.24 |
| [assembly] Assembly 분기문, 반복문 (0) | 2025.05.24 |
| [assembly] Assembly 기본 문법 (0) | 2025.05.24 |
| [assembly] x86 Assembly? (0) | 2025.05.24 |