분류 전체보기 썸네일형 리스트형 Torch7를 사용하는 cpptorch의 Visual Studio 컴파일 방법 Torch7는 lua기반으로 되어 있는데 cpp에서 사용하려면 cpptorch라는 Wrapper를 이용해야 한다. 이 cpptorch를 가장 최근의 Torch7와 사용하기 위해서 약간의 에러 픽스가 필요하다. Torch7이 업데이트되면서 THNN 모듈이 빠졌기 때문에 본 포스팅에서는 합쳐서 컴파일하는 방식으로 진행한다. 먼저 3가지 파일을 다운받는다. https://github.com/torch/torch7 torch/torch7 http://torch.ch. Contribute to torch/torch7 development by creating an account on GitHub. github.com https://github.com/torch/nn torch/nn Contribute to tor.. 더보기 [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.. 더보기 PKCS#5 패딩과 PKCS#7 패딩의 차이점 암복호화 할 때 인풋이 암호 블럭 사이즈의 배수와 맞지 않으면 배수에 맞춰 빈공간을 채워주게 된다 이 채워주는 방법을 패딩이라고 부르는데 여기서 PKCS#5와 PKCS#7의 차이를 설명하겠다. PKCS#5는 암호 블럭 사이즈가 8바이트에 맞춰져 있다. 8바이트의 배수로 인풋을 맞춰줘야 하는데 패딩에 들어가는 문자는 패딩할 갯수가 들어간다. 예시를 들어보겠다. 데이터는 헥사다. AA 07 07 07 07 07 07 07 : 1바이트 데이터 + 7바이트 패딩 AA BB 06 06 06 06 06 06 : 2바이트 데이터 + 6바이트 패딩 AA BB CC 05 05 05 05 05 : 3바이트 데이터 + 5바이트 패딩 ... 규칙이 보이는가? 단 데이터가 8바이트인 경우 패딩이 필요 없어 보여도 PKCS#5 .. 더보기 몇가지 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별로 .. 더보기 [기초] 자바 웹프로그래밍에서 오류 쉽게 찾는 법. 자바서버를 돌리다보면 오류가 날때 어마어마한 스택트레이스 메시지에 질리기도 한다. Q&A 사이트에 가보면 이것을 보고도 오류를 못찾는 경우가 종종 있는 것 같다. 이 스택트레이스 메시지를 보고 오류를 쉽게 찾는 법을 포스팅한다. 규칙은 내가 작성한 코드가 아닌 클래스는 제외한다가 되겠다. 1. org.apache... 으로 시작되는 라인은 거른다. 2. java.base... 으로 시작되는 라인은 거른다. 3. org.spring... 으로 시작되는 라인은 거른다. 4. javax.servlet... 으로 시작되는 라인은 거른다. 남은 라인 중에서 스택트레이스에 내가 작성한 클래스가 있다면 에러 위치는 찾은 것이다. 스택트레이스에서 못찾았으면 내가 작성한 코드에서 오류가 없을 수도 있다. 그때도 스택트레.. 더보기 이전 1 2 3 4 다음