'OpenSSL'에 해당되는 글 1건
- 2011.07.12 C++ SSL 암호화 코드
# include <openssl/err.h>
# include <openssl/ssl.h>
/* AES Encrypt Process */
int encrypt_block(unsigned char* cipherText, unsigned char* plainText, unsigned int plainTextLen, unsigned char* key)
{
EVP_CIPHER_CTX *ctx = (EVP_CIPHER_CTX*)malloc(sizeof(EVP_CIPHER_CTX));
int addLen = 0, orgLen = 0;
unsigned long err = 0;
ERR_load_crypto_strings();
EVP_CIPHER_CTX_init(ctx);
if(EVP_EncryptInit(ctx, EVP_aes_128_cbc(), key, NULL) != 1) {
err = ERR_get_error();
printf("ERR : EVP_Encrypt() - %s\n", ERR_error_string(err, NULL));
return -1;
}
if(EVP_EncryptUpdate(ctx, cipherText, &orgLen, plainText, plainTextLen) != 1) {
err = ERR_get_error();
printf("ERR : EVP_EncryptUpdate() - %s\n", ERR_error_string(err, NULL));
return -1;
}
if (EVP_EncryptFinal(ctx, cipherText + orgLen, &addLen) != 1) {
err = ERR_get_error();
printf("ERR: EVP_EncryptFinal() - %s\n", ERR_error_string (err, NULL));
return -1;
}
EVP_CIPHER_CTX_cleanup(ctx);
ERR_free_strings();
return addLen + orgLen;
}
/* AES Decrypt Process */
int decrypt_block(unsigned char* plainText, unsigned char* cipherText, unsigned int cipherTextLen, unsigned char* key)
{
EVP_CIPHER_CTX *ctx = (EVP_CIPHER_CTX*)malloc(sizeof(EVP_CIPHER_CTX));
unsigned long err = 0;
int toLen = 0;
int outLen = 0;
ERR_load_crypto_strings();
EVP_CIPHER_CTX_init(ctx);
if (EVP_DecryptInit(ctx, EVP_aes_128_cbc(), key, NULL) != 1) {
err = ERR_get_error();
printf("ERR: EVP_DecryptInit() - %s\n", ERR_error_string (err, NULL));
return -1;
}
if (EVP_DecryptUpdate(ctx, plainText, &toLen, cipherText, cipherTextLen) != 1) {
err = ERR_get_error();
printf("ERR: EVP_DecryptUpdate() - %s\n", ERR_error_string (err, NULL));
return -1;
}
if (EVP_DecryptFinal(ctx, &plainText[cipherTextLen], &outLen) != 1) {
err = ERR_get_error();
printf("ERR: EVP_DecryptFinal() - %s\n", ERR_error_string (err, NULL));
return -1;
}
EVP_CIPHER_CTX_cleanup(ctx);
ERR_free_strings();
return toLen + outLen;
}
OpenSSL 라이브러리를 이용한 암호화 예제코드입니다.
공식 홈페이지에서 배포한게 아니라 어느분이 Windows 에서 오류없이 돌아가게끔 수정해놓은건데
정리가 잘되어 있어서 사용하기가 편리합니다.
사용시,
ssleay32.lib, libeay32.lib
이 라이브러리를 포함해주셔야 됩니다.
'Developer Gom > C,C++ (API/MFC/STL)' 카테고리의 다른 글
태극기를 그려주는 오토캐드 ARX 프로그램 (32비트용) (0) | 2012.12.21 |
---|---|
[MFC] 하드 디스크 일련번호(Serial) 얻기 (0) | 2011.08.08 |
MS Access Database 에서 Inner Join 예제 (0) | 2011.08.08 |
STL Vector 다차원 배열과 같은 처리 (0) | 2011.03.05 |