목차
- 파이썬 사용자에게 키 길이 입력받아 대칭키 랜덤 문자열 생성 예제 이전 포스팅 참고 학습
- C, C++에서 Openssl 라이브러리 활용하여 AES 256 암복호화 예제 이전 포스팅 참고 학습
- Java에서 AES 256 암복호화 예제 이전 포스팅 참고 학습
- 파이썬 AES 256 ECB 평문 문자열 암호화 예제
- 파이썬 AES 256 ECB 암호문 복호화 예제
파이썬 사용자에게 키 길이 입력받아 대칭키 랜덤 문자열 생성 예제 이전 포스팅 참고 학습
이전 포스팅에서는 사용자로부터 키의 길이를 입력받아 대칭키를 생성하는 방법을 다루었습니다. 오늘은 이전 포스팅에서 다룬 내용을 참고하여 AES 256 암호화에 사용할 랜덤 문자열 대칭키를 생성하겠습니다.
따라서 파이썬에서 랜덤 문자열 생성방법을 아직 모르신다면 아래의 링크를 참고하여 학습해주세요.
2023.08.21 - [Python] - [Python] 파이썬 특정 글자수 랜덤 문자열 생성 예제(random.choice)
C, C++에서 Openssl 라이브러리 활용하여 AES 256 암복호화 예제 이전 포스팅 참고 학습
이전 포스팅에서는 C나 C++ 언어에서 Openssl 라이브러리를 활용하여 AES 256 암복호화를 수행하는 방법에 대해 다루었습니다. Openssl을 이용하여 암호화와 복호화를 직접 구현하는 과정과 이를 통해 데이터를 출력하는 방법을 아직 모르시거나 궁금하시다면 아래 링크의 이전 포스팅을 참고해주세요.
2023.07.28 - [C] - [C/C++] Openssl 활용 AES256 암호화 및 복호화 예제 - 2(ECB암호화 및 체인 종류)
Java에서 AES 256 암복호화 예제 이전 포스팅 참고 학습
이전 포스팅에서는 Java 언어에서 AES 256 암복호화를 수행하는 방법을 설명하였습니다. Java에서 기본 제공하는 암호화 라이브러리를 활용하여 대칭키 암호화를 구현하고, AES 256을 이용하여 데이터를 암호화하고 복호화하는 예제를 확인할 수 있습니다. 궁금하시다면 아래 링크를 참고해주세요.
2023.08.17 - [Java] - [Java/Linux] 자바 AES 256 ECB 모드 대칭 암호화 및 복호화 예제
파이썬 AES 256 ECB 평문 문자열 암호화 예제
아래는 파이썬에서 AES 256 알고리즘을 이용하여 평문 문자열을 암호화하는 예제입니다. 랜덤하게 생성한 대칭키 문자열을 가지고 평문의 메세지를 암호화하여 암호문을 생성하는 예제입니다. print를 통해 암호문을 출력합니다.
import string
import random
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
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, plaintext):
cipher = AES.new(key, AES.MODE_ECB)
ciphertext = cipher.encrypt(pad(plaintext.encode('utf-8'), AES.block_size))
return ciphertext
key = bytes(generate_random_string(32), 'utf-8') # 256-bit key
plaintext = "Hello, AES 256 ECB!"
encrypted_data = aes_encrypt(key, plaintext)
print("Original Text:", plaintext)
print("Encrypted Data:", encrypted_data)
파이썬 AES 256 ECB 암호문 복호화 예제
아래는 암호화된 AES 256 암호문을 복호화하는 예제입니다. 암호문과 키를 활용하여 암호문을 원래의 평문으로 복호화할 수 있습니다.
import string
import random
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
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, plaintext):
cipher = AES.new(key, AES.MODE_ECB)
ciphertext = cipher.encrypt(pad(plaintext.encode('utf-8'), AES.block_size))
return ciphertext
def aes_decrypt(key, ciphertext):
cipher = AES.new(key, AES.MODE_ECB)
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
plaintext = "Hello, AES 256 ECB!"
encrypted_data = aes_encrypt(key, plaintext)
decrypted_data = aes_decrypt(key, encrypted_data)
print("Original Text:", plaintext)
print("Encrypted Data:", encrypted_data)
print("Decrypted Text:", decrypted_data)