#include <stdio.h>
/*openssl의 bn에서 bio를 참조하고 bio에서는 윈속을 참조함. 이거 추가 안하면 링크에러남.*/
#pragma comment(lib, "ws2_32.lib")
#include "openssl/bn.h" /*openssl의 빅넘버 관련 헤더*/
/*openssl의 스태틱 빌드된거 찾아보면 라이브러리 받아서 사용 할 수 있다.*/
#pragma comment (lib, "libcrypto_static.lib")
/*여담 : 윈도우즈에서 openssl 소스 받아다가 빌드 하려면 온갖 생쇼를 해야한다.
이미 누군가 빌드해둔 스태틱 버전 받아다 그냥 쓰는게 정신 건강에 이롭다.*/
/**
@brief [콘솔 전용]16바이트 단위로 개행하며 16진 값을 프린트 한다.
@param buffer 16진 출력을 시작할 버퍼
@param nPrintLen 프린트 할 바이트 수
*/
void hex_print(unsigned char* buffer, int nPrintLen)
{
const int nAlign = 16; /*16 바이트 단위로 개행*/
int i, k, nLen;
unsigned char* p;
if (!buffer) return;
p = (unsigned char*)buffer;
for (i = 0; i < nPrintLen; i += nAlign) {
p = buffer + i;
nLen = (nAlign < (nPrintLen - i) ? nAlign : nPrintLen - i);
for (k = 0; k < nLen; k++)
printf("%02X ", p[k]);
printf("\n");
}
}
int main()
{
BIGNUM* Xp = NULL;
BN_CTX* ctx = NULL;
unsigned char binP[128];
ctx = BN_CTX_new(); /*빅넘버 컨텍스트 생성*/
BN_CTX_start(ctx); /*컨텍스트 사용 시작을 알림*/
Xp = BN_CTX_get(ctx);
/*1024비트 소수 생성*/
if (!BN_generate_prime_ex(Xp, 1024, 0 , 0 , 0 , 0)) {
printf("소수 생성 실패 \n");
return 0;
}
BN_bn2bin(Xp, binP); /*빅넘버 -> byte* 형으로 변환 (bignum to binary 인듯)*/
hex_print(binP, 128); /*16진 출력 (1024비트 = 128바이트 모르면 바보)*/
BN_CTX_end(ctx); /*컨텍스트 사용 종료를 알림*/
BN_CTX_free(ctx); /*컨텍스트 해제*/
return 0;
}
|
cs |
실행 결과 :
RSA의 간단한 개요 정도는 이 친구의 뻘짓을 참고 해보도록 하자. >> hwan001.tistory.com/75
'뻘짓' 카테고리의 다른 글
libvpx를 통한 인코딩 예제 (0) | 2020.09.07 |
---|---|
libvpx 빌드하기 (파일 첨부 되어있음) (0) | 2020.09.05 |
무선랜 인터페이스 얻어오기 (0) | 2020.08.31 |
DirectX 스크린 캡쳐 (DXGI 캡쳐 예제) (0) | 2020.08.31 |
다이렉트X를 통한 그래픽카드 이름 얻어오기 (0) | 2020.08.03 |