vs2017 썸네일형 리스트형 [OpenSSL] EVP 방식으로 OpenSSL 사용하기 2/2 EVP 방식으로 OpenSSL에서 RSA 키를 만들고 이것을 이용하여 사인과 검증을 해보자. RSA 만드는 방법 pkctx = EVP_PKEY_CTX_new_id(EVP_PKEY_RSA, NULL); EVP_PKEY_keygen_init(pkctx); EVP_PKEY_CTX_set_rsa_keygen_bits(pkctx, 2048); EVP_PKEY_keygen(pkctx, &keypair); EVP_PKEY_CTX_free(pkctx); 키 생성부는 Init - Update - Final 구조로가 없는 것으로 보인다. 사인하는 방법 mctx = EVP_MD_CTX_new(); EVP_DigestSignInit(mctx, NULL, EVP_sha256(), NULL, keypair); EVP_Digest.. 더보기 [OpenSSL] EVP 방식으로 OpenSSL 사용하기 1/2 OpenSSL에서는 인터페이스가 규격화 된 최상위 API를 제공한다. 처음 접하는 사람들은 쉽게 접근할 수 있도록 배려한 것 같다. 참고로 EVP란 EnVeloPe 의 약자로 하위의 api를 포장했다는 의미가 있다. 예제를 보며 설명하겠다. void TestEVP_MessageDigest(const char *alg, const char *pP1, const char *pP2, const char *pP3) { EVP_MD_CTX *mctx; const EVP_MD *digest; digest = EVP_get_digestbyname(alg); unsigned char md[EVP_MAX_MD_SIZE]; unsigned int md_len; mctx = EVP_MD_CTX_new(); EVP_Diges.. 더보기 몇가지 Random Number Generation 예제 C++에서 난수를 발생시키는 방법이 몇가지 있다. 1. standard c 의 srand, rand를 사용 2. OpenSSL을 사용 3. stdard c++ 의 random을 사용 위 세가지 방법의 예제는 다음과 같다. 1. srand와 rand 를 사용 if (type == STDLIB)srand(time(NULL)); value = rand(); 2. OpenSSL을 사용 if (type == OPENSSL)RAND_status(); RAND_bytes((unsigned char *)&value, 4); 3. c++ random 을 사용 std::mt19937 engine(seed); std::uniform_int_distribution dis(m_min, m_max);// default MIN=0.. 더보기 [OpenSSL] AES 암호화 복호화 코드부터 보자. void PrintByteBuffer(const char *strName, unsigned char *bData, int size) { puts(""); puts(strName); for (int i = 0; i < size; i++) { printf("%02x ", bData[i]); if (i % 16 == 15)puts(""); } puts("---------------------------------------"); } void AESEncodingDecoding() { SHA256_CTXc; AES_KEYaes_key = {0}; unsigned charin[64]; unsigned charout[64]; unsigned charrestore[64]; intseed = time(.. 더보기 [OpenSSL] 인증서 생성과 GitHub 업로드 인증서는 공개키 배포를 위해 포장한 전자서류이다. 이 전자 서류를 OpenSSL로 만들 수 있다. 코드를 보자. void GenerateCertificatinECDSA() { EC_KEY*ecKey = NULL; EVP_PKEY*pKey = NULL; X509*x509; X509_NAME*nameX509; intnidEcc; FILE*fp; // Set Key Type. nidEcc = OBJ_txt2nid("secp521r1"); ecKey = EC_KEY_new_by_curve_name(nidEcc); if (ecKey == NULL)ERR_print_errors_fp(stderr); // Generate Key. EC_KEY_generate_key(ecKey); // // Create Certifi.. 더보기 [OpenSSL] ECDSA Sign 과 Verify 이전 포스팅에서 만든 프로젝트에 간단한 ECDSA 방식으로 싸인하고 검증하는 코드를 만들어 보겠다. // TestOpenSSL.cpp: 콘솔 응용 프로그램의 진입점을 정의합니다. // #include "stdafx.h" #include "openssl/evp.h" #include "openssl/err.h" #include "openssl/ec.h" #include "openssl/sha.h" #ifdef _DEBUG #pragma comment (lib, "libcryptoMDd.lib") #pragma comment (lib, "libsslMDd.lib") #else #pragma comment (lib, "libcryptoMD.lib") #pragma comment (lib, "libsslMD.li.. 더보기 [OpenSSL] 시작 - VS2017에 세팅하기 OpenSSL은 잘 알려진 SSL/TLS 라이브러리인데 이 안에 여러가지 암호화 모듈이 내장되어 있다. 앞으로 이 모듈을 사용하기 위한 방법을 한글로 포스팅할 것이다. 그전에 먼저 OpenSSL 개발환경을 세팅하기로 하자. OpenSSL은 소스가 공개되어 있지만 이것을 직접 컴파일해서 사용하는 것은 번거로운 일이다. 그래서 여러 사이트에서 각자만의 OpenSSL prebuild를 제공한다. 자기 개발환경, MinGW냐 Visual Studio냐 등등에 따라서 세팅방법이 달라지는데 여기서는 VS2017 기준으로 하겠다. VS2017의 설치는 너무 기본적인 것이므로 포스팅을 생략한다. 여기서 다운받자. ==> 추천하는 OpenSSL 라이브러리 다운로드 사이트 각 VisualStudio 버전별로 Arch별로 .. 더보기 이전 1 다음