목차
1. 이전 빌드 환경 구성 포스팅
이전에 OpenSSL 라이브러리를 정적 또는 동적으로 빌드하는 방법과 개발 환경을 구성하는 방법에 대한 포스팅입니다.
2023.07.28 - [C] - [C/C++] Openssl 정적 라이브러리 빌드 및 Codelite 설치, 개발 환경 구성(ubuntu, codelite)
2. 이전 AES 암호화 포스팅
이전에 C에서 OpenSSL 라이브러리를 활용하여 AES 암호화를 수행하는 방법에 대한 포스팅입니다.
2023.07.28 - [C] - [C/C++] Openssl 활용 AES256 암호화 및 복호화 예제 - 1(컨텍스트 생성 및 키 설정 및 ECB 암복호화)
3. C Openssl AES 256 CBC 암복호화 예제
이 예제에서는 C 프로그램에서 OpenSSL 라이브러리를 사용하여 AES 256 CBC 모드로 암호화와 복호화를 수행하는 방법을 설명합니다.
#include <stdio.h>
#include <string.h>
#include <openssl/aes.h>
int main() {
AES_KEY aes_key = {0,};
unsigned char key[32] = {0,};
unsigned char iv[16] = {0,};
unsigned char plaintext[256] = "This is a msg";
unsigned char ciphertext[256] = {0,};
unsigned char decrypted[256] = {0,};
printf("Plaintext: %s\n", plaintext);
memset(key, 1, sizeof(key));
memset(iv, 1, sizeof(iv));
if (AES_set_encrypt_key(key, 256, &aes_key) < 0) {
printf("AES 암호화 키 설정 오류\n");
return 1;
}
// 암호화
AES_cbc_encrypt(plaintext, ciphertext, 13, &aes_key, iv, AES_ENCRYPT);
printf("Ciphertext: %s\n", ciphertext);
memset(iv, 1, sizeof(iv));
if (AES_set_decrypt_key(key, 256, &aes_key) < 0) {
printf("AES 복호화 키 설정 오류\n");
return 1;
}
// 복호화
AES_cbc_encrypt(ciphertext, decrypted, 13 , &aes_key, iv, AES_DECRYPT);
printf("Decrypted: %s\n", decrypted);
return 0;
}
주의 사항으로는 한번 암호화를 수행하면 iv는 계속 변화하기 때문에 위 예제에서 복호화하기 이전에 iv값을 원래의 값으로 바꿔주어야한다.
4. AES에서 IV 설정 예제
AES 암호화 모드에서 사용하는 초기화 벡터(IV)를 설정하는 방법에 대한 예제입니다.
#include <stdio.h>
#include <string.h>
#include <openssl/aes.h>
int main() {
unsigned char iv[16] = "0123456789abcdef"; // 16바이트 초기화 벡터
// 초기화 벡터 설정 코드
// ...
// AES_cbc_encrypt(plaintext, ciphertext, strlen(plaintext), &aes_key, iv, AES_ENCRYPT);
return 0;
}
반응형