2012-09-22 2 views
0

나는 C++과 C#에서이 예제의 톤을 볼 수 있지만 C와는 아무런 문제가 없다. 외부 DLL을 참조하지 않고 문자열을 간단하게 암호화하려고한다. cl32.lib 그냥이었다 응용 프로그램을 실행할 때이 일을 컴파일하는 동안, 나는 깨달았다외부 DLL없이 C에서 PGP 공개 키로 문자열을 암호화 하시겠습니까?

#include "include/cryptlib/cryptlib.h" 

void PGPEncrypt(char* input, char* output) { 
    CRYPT_ENVELOPE cryptEnvelope; 
    int bytesCopied; 

    cryptCreateEnvelope(&cryptEnvelope, CRYPT_UNUSED, CRYPT_FORMAT_CRYPTLIB); 

    // Below line makes things more efficient if you know the data size 
    cryptSetAttribute(cryptEnvelope, CRYPT_ENVINFO_DATASIZE, strlen(input)); 

    // Push unencrypted, pop encrypted. 4000 is the size of output 
    cryptPushData(cryptEnvelope, input, strlen(input), &bytesCopied); 
    cryptFlushData(cryptEnvelope); 
    cryptPopData(cryptEnvelope, output, 4000, &bytesCopied); 

    cryptDestroyEnvelope(cryptEnvelope); 
} 

그러나 : 나는 다음이 .c 파일 (PGP로 이동하기 전에 단지 기본 암호화)와 함께 cryptlib을 시도 시작 헤더 라이브러리 및 시스템에 cl32.dll 파일을 설치해야합니다. DLL을 필요로하지 않는 프로젝트에 포함 할 수있는 정적 cl32.lib 파일을 만드는 방법을 아직 알지 못했습니다. 그건, 또는 다른 비 cryptlib 솔루션을 작동합니다.

나는 또한 Crypto ++를 살펴 봤지만, 불행히도 다운로드 가능한 chm 사용자 안내서가 손상되어 설명서가 너무 자세히 나와 어떤 안내없이 따르지 않습니다.

나는 C 전체를 상당히 잘 알고 있지만, 대부분의 경험은 오래되었고 Linux에서는 지금하고있는 Visual Studio 2010을 사용하지 않고 있습니다.

덕분에, 벤

답변

1

당신은 방금 종속성을 제거 할 경우, 정적 프로그램을 컴파일하여 외부 종속성을 포함 할 수 있습니다.

Windows 시스템에서 누락 된 DLL에 대해 걱정할 경우 모든 Windows 시스템에있는 Windows 암호화 API를 사용할 수 있습니다.

Example C Program: Using CryptAcquireContext

당신은 여전히 ​​당신의 자신의 암호화 라이브러리를 구현할 수 있습니다이 중 하나를 원하지 않는 경우

Cryptography Reference. 그러나 잠재적 인 함정이 가득하기 때문에 권장하지 않습니다. 암호 전문가 일지라도.

+0

감사! 이것은 Visual Studio 중 주니어 상태 일 가능성이 있지만 정적 EXE를 어떻게 컴파일합니까? 나는 많은 자습서를 찾았지만 찾은 모든 것이 cl32.lib 파일 (임포트 라이브러리)을 프로젝트에 포함시킨 다음 cl32.dll이 같은 폴더에 있어야합니다. 내 EXE 내에 실제로 cl32.dll 파일을 포함시키는 구체적인 방법이 있습니까? 이 기능이 작동하지 않으면 Windows 암호화도 체크 아웃합니다. 다시 한번 감사드립니다. – Fmstrat

+0

또한 windows crypto API를 살펴 보았습니다. 파일 크기가 적 으면 저에게 도움이 될 수 있다고 생각하지만 기존의 PGP 공개 키와 개인 키는 처리 할 수 ​​있습니까? 나는 키를 생성하는 곳에서 많은 소스 예제를 본 다음이를 사용하지만 기존의 ASCII 키 파일이 있는지에 대해서는 아무 것도 찾을 수 없습니다. – Fmstrat

+0

참고로 내 두 번째 질문에 대한 대답은 아니오 인 것처럼 보입니다. http://social.msdn.microsoft.com/Forums/en-US/visualfoxprogeneral/thread/c9155c02-f792-4ce0-b601-2c0e76251fec 감사합니다. 첫 번째 DLL (DLL)을 아직 찾지 못했습니다. – Fmstrat

관련 문제