목차
1. RSA란?
RSA는 Rivest-Shamir-Adleman의 약자로, 공개키 암호 시스템의 대표적인 알고리즘입니다.
RSA 암호화 알고리즘은 공개키와 개인키를 사용하여 데이터를 암호화하고 복호화하는데 사용됩니다.
2. 이전 빌드 환경 구성 포스팅
이전에 C에서 OpenSSL 라이브러리를 활용하기 위한 빌드 환경 구성 방법에 대한 포스팅입니다.
2023.07.28 - [C] - [C/C++] Openssl 정적 라이브러리 빌드 및 Codelite 설치, 개발 환경 구성(ubuntu, codelite)
3. C Openssl RSA 공개키 생성 예제
이 예제에서는 C 프로그램에서 OpenSSL 라이브러리를 사용하여 RSA 공개키를 생성하는 방법을 설명합니다.
#include <stdio.h>
#include <openssl/rsa.h>
#include <openssl/pem.h>
int main() {
RSA *rsa_keypair = RSA_new();
BIGNUM *e = BN_new();
BN_set_word(e, RSA_F4);
// RSA 키페어 생성
if (RSA_generate_key_ex(rsa_keypair, 2048, e, NULL) != 1) {
printf("RSA 공개키 생성 오류\n");
return 1;
}
// 공개키 정보 출력
printf("공개키 정보:\n");
PEM_write_RSAPublicKey(stdout, rsa_keypair);
RSA_free(rsa_keypair);
BN_free(e);
return 0;
}
4. C Openssl RSA 개인키 생성 예제
이 예제에서는 C 프로그램에서 OpenSSL 라이브러리를 사용하여 RSA 개인키를 생성하는 방법을 설명합니다.
#include <stdio.h>
#include <openssl/rsa.h>
#include <openssl/pem.h>
int main() {
RSA *rsa_keypair = RSA_new();
BIGNUM *e = BN_new();
BN_set_word(e, RSA_F4);
// RSA 키페어 생성
if (RSA_generate_key_ex(rsa_keypair, 2048, e, NULL) != 1) {
printf("RSA 개인키 생성 오류\n");
return 1;
}
// 개인키 정보 출력
printf("개인키 정보:\n");
PEM_write_RSAPrivateKey(stdout, rsa_keypair, NULL, NULL, 0, NULL, NULL);
RSA_free(rsa_keypair);
BN_free(e);
return 0;
}
5. 공개키 파일로 저장하기
이 예제에서는 C 프로그램에서 OpenSSL 라이브러리를 사용하여 생성한 RSA 공개키를 파일로 저장하는 방법을 설명합니다.
#include <stdio.h>
#include <openssl/rsa.h>
#include <openssl/pem.h>
int main() {
RSA *rsa_keypair = RSA_new();
BIGNUM *e = BN_new();
BN_set_word(e, RSA_F4);
// RSA 키페어 생성
if (RSA_generate_key_ex(rsa_keypair, 2048, e, NULL) != 1) {
printf("RSA 공개키 생성 오류\n");
return 1;
}
// 공개키 파일로 저장
FILE *public_key_file = fopen("/tmp/public_key.pem", "w");
PEM_write_RSAPublicKey(public_key_file, rsa_keypair);
fclose(public_key_file);
RSA_free(rsa_keypair);
BN_free(e);
return 0;
}
6. 개인키 파일로 저장하기
이 예제에서는 C 프로그램에서 OpenSSL 라이브러리를 사용하여 생성한 RSA 개인키를 파일로 저장하는 방법을 설명합니다.
#include <stdio.h>
#include <openssl/rsa.h>
#include <openssl/pem.h>
int main() {
RSA *rsa_keypair = RSA_new();
BIGNUM *e = BN_new();
BN_set_word(e, RSA_F4);
// RSA 키페어 생성
if (RSA_generate_key_ex(rsa_keypair, 2048, e, NULL) != 1) {
printf("RSA 개인키 생성 오류\n");
return 1;
}
// 개인키 파일로 저장
FILE *private_key_file = fopen("/tmp/private_key.pem", "w");
PEM_write_RSAPrivateKey(private_key_file, rsa_keypair, NULL, NULL, 0, NULL, NULL);
fclose(private_key_file);
RSA_free(rsa_keypair);
BN_free(e);
return 0;
}
반응형