'OpenSSL'에 해당되는 글 1건

  1. 2011.07.12 C++ SSL 암호화 코드
2011. 7. 12. 14:12

# 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

이 라이브러리를 포함해주셔야 됩니다.

Posted by 나이스곰