Microsoft MVP성태의 닷넷 이야기
안녕하세요.. openssl 관련하여...혹시.. [링크 복사], [링크+제목 복사],
조회: 14901
글쓴 사람
나그네. (huss5210 at nate.com)
홈페이지
첨부 파일
 

안녕하세요. open소스들은 한번씩 살펴보다가
과정에서.. 잘 되지 않아.. 혹시나 참고나 답변을 얻을수 있지 않을까 해서.. 이렇게 글을 올려봅니다.

openssl를 가지고 살펴 보고 있는데..
과정에서 이거 저거 살펴 보면서 정리가 안되고 있는지.. 계속 해매고 있습니다.ㅋㅋ;;
기초가 부족한 탓일수도 있지만.. 조금 답답해서...

// openssl.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다.
//

#include "stdafx.h"
#include <iostream>
#include <string>
#include <fstream>
#include <openssl/bio.h>
#include <openssl/err.h>
#include <openssl/bn.h>
#include <openssl/rsa.h>
#include <openssl/evp.h>
#include <openssl/x509.h>
#include <openssl/pem.h>
#include <openssl/rand.h>
#include <openssl/err.h>
#include <openssl/pkcs12.h>


// openSSL에서 사용하는 lib
#pragma comment(lib, "libeay32.lib")
#pragma comment(lib, "ssleay32.lib")

/* Type of key */
#define PUBLIC 1
#define PRIVATE 2
 
 #define BITSLen 2048
 


using namespace std;

 
int genrsa_callback(int p, int n, BN_GENCB *cb)
{
    char c='*';

    if (p == 0) c='.';
    if (p == 1) c='+';
    if (p == 2) c='*';
    if (p == 3) c='\n';

    BIO_write((BIO*)cb->arg, &c, 1);
    (void)BIO_flush((BIO*)cb->arg);

#ifdef LINT
    p=n;
#endif

    return 1;
}

 

int testRSAOutput(RSA *r) <<이부분에서.. 이해가..
{
    int ret;
    BIO *out,*in;
    RSA *read;

    const EVP_CIPHER *enc;

    OpenSSL_add_all_algorithms();

    enc=EVP_des_ede3_ofb();

    out=BIO_new_file("pri.pem","w");

    ret=PEM_write_bio_RSAPrivateKey(out,r,enc,NULL,0,NULL,"sadfasdfsadfsadfsadfsadfsadfsdafafdsdfdsafo");
    if(ret!=1)
    {
        RSA_free(r);
        BIO_free(out);
        return -1;
    }
    BIO_flush(out);
    BIO_free(out);

    out=BIO_new_file("pub.pem","w");
    ret=PEM_write_bio_RSAPublicKey(out,r);
    
    if(ret!=1)
    {
        RSA_free(r);
        BIO_free(out);
        return -1;
    }

    BIO_flush(out);
    BIO_free(out);

    in=BIO_new_file("pri.pem","rb");
    read=RSA_new();
    read=PEM_read_bio_RSAPrivateKey(in,&read,NULL,"sadfasdfsadfsadfsadfsadfsadfsdafafdsdfdsafo");
 

    if(read->d != NULL)
    {
        cout << read->d << endl;
        printf("test ok!\n");
    }
    else
    {
        printf("err!\n");
    }
    RSA_free(read);
    BIO_free(in);
    return 0;
}
 
int _tmain(int argc, _TCHAR* argv[])
{
  
    wcout.imbue(locale("korean"));


     const EVP_CIPHER *enc;
 

    RSA *rsa;
    BIO *out,*in;

    int len, ret;

    char *cipherText;

    char *plainText = "Hello RSA!";

    char *originText;

 
    OpenSSL_add_all_algorithms();

    enc=EVP_des_ede3_ofb();

    in=BIO_new_file("pri.pem","rb");
    rsa=RSA_new();
   // rsa=PEM_read_bio_RSA_PUBKEY(in,NULL, NULL,NULL);

     rsa=PEM_read_bio_RSAPrivateKey(in,&rsa,NULL,"sadfasdfsadfsadfsadfsadfsadfsdafafdsdfdsafo");
 

    if(rsa->d != NULL)
    {
        cout << rsa->d << endl;
        printf("test ok!\n");
    }
    else
    {
        printf("err!\n");
    }
 

        cipherText = (char *) calloc (1, (size_t) RSA_size(rsa));

        len = RSA_public_encrypt(strlen(plainText), (const unsigned char*)plainText, (unsigned char*)cipherText, rsa, RSA_PKCS1_PADDING);

        if (len == -1)
        {

               perror("not encrypt data");
               exit(0);

        }

 

      // printf("plain text: %s\n", plainText);
        printf("ciper text: %s\n", cipherText);

 
        originText = (char *) calloc(1, strlen(plainText)+1);
        ret = RSA_private_decrypt(len, (unsigned char*)cipherText, (unsigned char*)originText, rsa, RSA_PKCS1_PADDING);

        if (ret == -1)

        {

               perror("not decrypt data");

               exit(0);

        }

 

        printf("origin text: %s\n", originText);

 

        free(cipherText);
        free(originText);
        RSA_free(rsa);

 
 
    return 0;
}

코드는 이렇게 되어 있는데..
우선 pem생성은 잘 되는데.. 원리가..
pri + pub 두개를 합쳐서 인코딩 디코딩을 ..하는 것이 아닌지..
rsa=PEM_read_bio_RSA_PUBKEY(in,NULL, NULL,NULL); 에러 발생하고... rsa=PEM_read_bio_RSAPrivateKey(in,&rsa,NULL,"sadfasdfsadfsadfsadfsadfsadfsdafafdsdfdsafo"); 할대는 정상 처리 됩니다..
제가 아직 부족해서.. 지금.. 요점을 벗어 나고 있는것은 아닌지.. 잘못 크게 이해 하고 잇는지...

혹시 아시는 다면 답변 해 주시면 감사드립니다.

구글을 통해 이리 저리 찾아보고 잇는데.. 쉽지가 않군요.. 혹시..여기서는 답변을 듣을수 있지 않을까 해서.. 올려 봅니다.
좋은 하루 보내세요..








[최초 등록일: ]
[최종 수정일: 10/6/2010]


비밀번호

댓글 작성자
 



2010-10-07 02시06분
[나그네] 아 찾아네요.. ㅋㅋㅋ 죄송합니다. 좀더 살펴보고 질문드렸어야 했는데..
쉽지 않군요. ^^
[guest]
2010-10-07 09시53분
^^ (휴~~~ 안도의 한숨을 쉬는 중! ^^)
나그네님. 멋집니다. ^^
kevin25

[1]  2  3  4  5  6  7  8  9  10  11  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
5955tree...11/8/2024223C#12 책 179 페이지 문의 사항 [2]
5954SunN...10/10/20241047textbox에서 글자입력후 textBox1_KeyUp함수에서listBox1_SelectedIndexChanged 강제호출방법 [1]
5953Roya10/4/2024911c# com host dll을 c++에서 사용할 때, sdk 관련 runtime 을 설치 안하고 제공할수 있을까요?? [1]
5952우광현9/5/20242000서버용 소켓 포트 동적포트 적용시 클라이언트가 호출하는 방법? [2]
5951Kun ...8/21/20241856c++에서 복합데이터 Struct를 .NET Framework에서 구현할 수 있는 방법이 있을까요? [2]
5950SunN...8/18/20242172정석대로 한다면 response.Close() 해야되는지요? [4]
5949SunN...8/16/20242319SqlConnection Open()에서 에러가나면 Close()하는 시점 [3]
5948SunN...8/14/20242368WebRequestMethods.Ftp.MakeDirectory 해제 [3]
5947Roya8/7/20242758c# dll을 cpp lib에서 사용을 할려고 하는데요. CoCreateInstance 에서 지정된 파일을 찾을수 없다고 나오는대요. [4]
5946SunN...8/5/20242877TaskDefinition 에서 사용저가로그온상관없이실행 [3]파일 다운로드1
5945SunN...8/3/20242698윈도우 작업스케줄러 [1]
5944roya8/1/20242699C# dll을 C++ 프로젝트에서 사용을 하고 싶은데, 레지스트리 등록 없이 가능한걸까요?? [2]
5943SunN...8/1/20242629윈도우C#에서 리눅스FTP로 업로드 및 리눅스에 폴더생성(WindowsOS에서C#으로) [3]
5942vict...7/24/20242798dll 을 c#에서 쓰고 싶습니다 [1]
5941vict...7/17/20243974DependencyObject와 같은 스레드에서 DependencySource를 만들어야 합니다. 오류 [2]
5940ckm7/16/20244155선생님 안녕하세요 async await 교착 관련 질문입니다 [1]
5939괴물신인7/9/20244127템플릿 대체할수있는방법이 있을까요? [6]
5938씨제바보7/5/20243315책 질문드립니다. [1]
5937Thor... donator5/27/20244376C# 12 는 전자책이 언제쯤 나오게 될까요? [1]
5936ds4/26/20245398활성화 되어 있는 커뮤니티 발견하게 되어 기분이 좋습니다. 자주 놀러 올께요. (내용 없습니다. [2]
5935양승조 donator4/25/20245804Reflection 관련 질문 드립니다. [5]파일 다운로드1
5934양승조 donator4/24/20244323Reflection 관련 질문 드립니다. [1]
5933vict...4/23/20244354cpp 라이브러리 디버깅 방법 문의 드립니다. [1]
5932EK4/12/20244395다음 제네릭에서 널익셉션이 뜨는 이유를 알수있을까요? [1]
5931이대희4/2/20244701Windows 앱 SDK C# 템플릿의 용도가 무엇인지요? [1]
[1]  2  3  4  5  6  7  8  9  10  11  12  13  14  15  ...