2011-08-13 3 views
5

파일에 서명 할 수 있기를 원합니다. 그 말은받는 사람이 파일이 실제로 나에게서 왔는지 확인하고 내용을 볼 수 있음을 의미합니다. C++에서 그렇게하는 간단한 방법이 있습니까?C++에서 공개 키 암호화를 구현하는 간단한 방법은 무엇입니까?

위키 피 디아의 PGP 기사를 보았지만 "해시, 데이터 압축, 대칭 키 암호화 및 공개 키 암호화"중간에 나를 잃어 버렸습니다. 이상적으로는, 라이브러리가 signString(string, privateykey)이고 수신자가 readSignedString(string, publickey) 인 라이브러리를 원합니다. 어떠한 제안?

편집 : 내가 올바른 접근 방식을 사용하고 확실하지 않다

, 그래서 여기에 내가 할 노력하고있어입니다 :

을 나는 몇 가지 간단한 불법 복제 방지를 구현하려는 내 데스크톱 응용 프로그램. 따라서 사용자가 라이선스를 구입하면 이름과 이메일이 포함 된 서명 된 파일을 보내 게됩니다. 그런 다음 사용자가 파일을 설치하면 응용 프로그램에서 파일을 읽습니다. 서명 유효성을 검사하고 정보 상자에 이름/전자 메일을 표시합니다. 크래커가 이러한 파일을 생성 할 수 없도록하려면 파일의 암호를 해독 할 키가 암호화 할 키와 같지 않은지 확인해야합니다. 이것을 구현할 수있는 간단한 방법이 있습니까?

+0

파일을 암호화하거나 (코드 예제에서 말한 것처럼) 파일에 서명하고 싶습니까 (텍스트와 제목이 말하는대로)? – knittl

+0

파일 (또는 문자열)에 서명하고 싶습니다. - 예를 보여주기 위해 업데이트했습니다. 나는 그것이 더 분명해 지길 바란다. –

+1

나는 그것이 내가 묻는 것이 아니라는 것을 안다. –

답변

0

여기에있는 대부분의 제안을 시도한 후에 openpgp 명령 줄 도구를 사용하여 정보를 얻었습니다. 일단 UPXed되면 아주 가볍습니다, 그것은 크로스 플랫폼이며, 내가 필요한 것을 쉬운 방식으로합니다.

6

OpenSSL은 거의 필요한 것입니다. 두 가지 기능이 없지만 거의 쉽습니다. 우선 모든 디지털 서명에는 해시 알고리즘이 필요합니다. 이유는 파일을 암호화하지 않고 파일 해시 만 암호화하기 때문입니다 (그렇지 않으면 확인하는 데 너무 오래 걸립니다).

#include <openssl/evp.h> 

EVP_MD_CTX ctx; 
unsigned char signature[SIGNATURE_LEN]; 
int signature_len; 

EVP_SignInit(&ctx, EVP_sha1()); 
EVP_SignUpdate(&ctx, data, size); 
EVP_SignFinal(&ctx, signature, &signature_len, pkey); 

그리고 거의 같은 단지 EVP_ValidateInit, EVP_ValidateUpdateEVP_ValidateFinal를 사용하여 서명의 유효성을 검사 :

는 OpenSSL을 사용하면이 같은 것을 사용할 수 있습니다. 마지막 함수는 0/1을 반환하여 유효성 검사가 성공했는지 여부를 나타냅니다.

당신은 여전히 ​​응용 프로그램에 열쇠를 얻을 필요가

, 당신은 (파일/메모리/인증서 등)에서 읽을 위치에 따라

2

또한 Keyczar을 사용할 수 있습니다, 그렇게 꽤 몇 가지 기능이 있습니다 파일 암호화 및 암호 해독 용.

실제로 이런 식으로 프로그램을 크랙킹 할 수는 없지만 크래커는 프로그램을 분해하고 서명 된 파일의 유효성을 검사하는 기능을 찾고 모든 종류의 파일을 허용하도록 변경합니다 파일.

+0

매우 유망한 프로젝트 같지만 불행히도 Windows가 아닙니다. –

+0

나는 내 프로그램을 크랙킹 할 수 없다는 것을 알고있다. 내 목표는 보호를 성가 시게하는 것이다. 인터넷에서 금이 간행 된 버전을 다운로드하는 것이 유일한 방법이다. 왜냐하면 어떤 사람들은 물건을 다운로드하고 싶지 않기 때문이다. dodgy crack 웹 사이트에서). 누군가가 라이센스 파일을 게시하면 이름이 첨부되어 향후 버전의 라이센스를 블랙리스트에 올릴 수 있습니다. –

관련 문제