목차
- 파이썬 사용자에게 키 길이 입력받아 대칭키 랜덤 문자열 생성 예제 이전 포스팅 참고 학습
- C, C++에서 Openssl 라이브러리 활용하여 AES 256 CBC 암복호화 예제 이전 포스팅 참고 학습
- Java에서 AES 256 CBC 암복호화 예제 이전 포스팅 참고 학습
- 파이썬 AES 256 ECB 암복호화 예제 이전 포스팅 참고 학습
- 파이썬 AES 256 CBC 평문 문자열 암호화 예제
- 파이썬 AES 256 CBC 암호문 복호화 예제
파이썬 사용자에게 키 길이 입력받아 대칭키 랜덤 문자열 생성 예제 이전 포스팅 참고 학습
이전 포스팅에서는 사용자로부터 키의 길이를 입력받아 대칭키를 생성하는 방법을 다루었습니다. 오늘 예제에서도 AES 256 CBC모드로 평문의 메세지를 암복호화하는데 키와 IV가 필요합니다.
키는 32바이트 길이의 값이 필요하고 IV는 16 바이트 길이의 값이 필요합니다. 이 값들을 사용자에게 길이를 입력받아 랜덤한 문자열로 생성하도록 하겠습니다.
파이썬에서 아직 랜덤 문자열 생성방법을 모르신다면 아래 링크를 참고해주세요.
2023.08.21 - [Python] - [Python] 파이썬 특정 글자수 랜덤 문자열 생성 예제(random.choice)
C, C++에서 Openssl 라이브러리 활용하여 AES 256 CBC 암복호화 예제 이전 포스팅 참고 학습
이전 포스팅에서는 C나 C++ 언어에서 Openssl 라이브러리를 활용하여 AES 256 CBC 암복호화를 수행하는 방법에 대해 다루었습니다. C에서 ECB모드 암복호화가 아닌 CBC 암복호화 방법이 궁금하시다면 아래 링크의 이전 포스팅을 참고해주세요. 해당 포스팅에는 예제가 포함되어있습니다.
2023.07.31 - [C] - [C/C++] Openssl 활용 AES256 암호화 및 복호화 예제 - 3(CBC, CTR, 등)
Java에서 AES 256 CBC 암복호화 예제 이전 포스팅 참고 학습
이전 포스팅에서는 Java 언어에서 AES 256 CBC 암복호화를 수행하는 방법을 설명하였습니다. Java에서 기본 제공하는 암호화 라이브러리를 활용하여 대칭키 암호화를 구현하고, AES 256을 이용하여 데이터를 암호화하고 복호화하는 예제가 포함되어있습니다. 해당 예제가 궁금하시다면 아래 링크를 참고해주세요.
2023.08.17 - [Java] - [Java/Linux] 자바 AES 256 CBC 모드 암복호화에 IV 사용 예제
파이썬 AES 256 ECB 암복호화 예제 이전 포스팅 참고 학습
마지막으로 이전 포스팅에서 파이썬 환경의 AES 256 ECB 암복호화 하는 방법에 대한 예제를 다루었습니다. ECB 모드는 가장 일반적인 암복호화 모드입니다. 아직 파이썬 환경에서의 AES 암복호화 방법을 모르신다면 아래 링크를 통해 학습해주세요.
2023.08.21 - [Python] - [Python] 파이썬 AES 256 ECB 암복호화 예제(pycryptodome)
파이썬 AES 256 CBC 평문 문자열 암호화 예제
아래는 파이썬에서 AES 256 CBC 알고리즘을 이용하여 평문 문자열을 암호화하는 예제입니다. 키와 IV가 필요하며 이 두 개의 값으로 평문의 메세지를 암호화합니다.
import string
import random
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
from Crypto.Util import Counter
def generate_random_string(length):
characters = string.ascii_letters + string.digits + string.punctuation
random_string = ''.join(random.choice(characters) for _ in range(length))
return random_string
def aes_encrypt(key, iv, plaintext):
cipher = AES.new(key, AES.MODE_CBC, iv=iv)
ciphertext = cipher.encrypt(pad(plaintext.encode('utf-8'), AES.block_size))
return ciphertext
key = bytes(generate_random_string(32), 'utf-8') # 256-bit key
iv = bytes(generate_random_string(16), 'utf-8') # 128-bit IV
plaintext = "Hello, AES 256 CBC!"
encrypted_data = aes_encrypt(key, iv, plaintext)
print("Original Text:", plaintext)
print("Encrypted Data:", encrypted_data)
파이썬 AES 256 CBC 암호문 복호화 예제
아래는 AES 256 암호문을 복호화하는 예제입니다. 암호화에 사용된 동일한 대칭키와 IV값을 가지고 평문의 메세지를 구할 수 있습니다.
import string
import random
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
from Crypto.Util import Counter
def generate_random_string(length):
characters = string.ascii_letters + string.digits + string.punctuation
random_string = ''.join(random.choice(characters) for _ in range(length))
return random_string
def aes_encrypt(key, iv, plaintext):
cipher = AES.new(key, AES.MODE_CBC, iv=iv)
ciphertext = cipher.encrypt(pad(plaintext.encode('utf-8'), AES.block_size))
return ciphertext
def aes_decrypt(key, iv, ciphertext):
cipher = AES.new(key, AES.MODE_CBC, iv=iv)
decrypted_data = unpad(cipher.decrypt(ciphertext), AES.block_size)
return decrypted_data.decode('utf-8')
key = bytes(generate_random_string(32), 'utf-8') # 256-bit key
iv = bytes(generate_random_string(16), 'utf-8') # 128-bit IV
plaintext = "Hello, AES 256 CBC!"
encrypted_data = aes_encrypt(key, iv, plaintext)
decrypted_data = aes_decrypt(key, iv, encrypted_data)
print("Original Text:", plaintext)
print("Encrypted Data:", encrypted_data)
print("Decrypted Data:", decrypted_data)