2014-06-11 5 views
1

나는 암호화, 암호 해독, 서명 및 확인과 같은 기본 전자 메일 보안 작업을 수행 할 수있는 Android 응용 프로그램을 만듭니다. 지금까지 모든 4 작업을 성공적으로 수행 할 수있었습니다. 그러나 내가 아직 알아 내지 못한 한 가지는 런타임에 서명 알고리즘을 지정하는 방법입니다.OpenSSL에서 동적으로 서명 알고리즘 선택

나는 사용자가 서명 알고리즘 알고리즘을 선택할 수있는 드롭 다운 목록을 원합니다.

나는 암호화의 경우이 작업을 수행하는 방법을 알고 있습니다. 그러나 서명을 위해 PKCS7_Sign 함수 호출에 알고리즘을 지정하지 않습니다. 그렇다면 메일에 서명 할 때 사용해야하는 서명 알고리즘을 어떻게 설명해야합니까?

미리 감사드립니다.

답변

0

그러나 서명을 위해 PKCS7_sign 함수 호출에 알고리즘을 지정하지 않았습니다. 그렇다면 메일에 서명 할 때 어떤 서명 알고리즘을 사용해야 하는지를 어떻게 표현해야합니까? .

시도 PKCS7_add_signature. <openssl dir>/crypto/pkcs7/pkcs7.h에서 :

PKCS7_SIGNER_INFO *PKCS7_add_signature(PKCS7 *p7, X509 *x509, 
             EVP_PKEY *pkey, const EVP_MD *dgst); 

구현은 <openssl dir>/crypto/pkcs7/pk7_lib.c에서 찾을 수 있습니다 pk7_lib.c에 있습니다. 기능에는 그다지 중요하지 않습니다. 헤비 리프팅이 PKCS7_SIGNER_INFO_set에 의해 수행 된 것 같습니다.

라이브러리의 몇 군데에서 사용됩니다. openssl cms 명령은 명령 줄에서 작업 할 수 있도록해야한다

$ cd openssl-1.0.1h 
$ grep -R PKCS7_add_signature * 
crypto/pkcs7/enc.c: if (PKCS7_add_signature(p7,x509,pkey,EVP_sha1()) == NULL) goto err; 
crypto/pkcs7/pk7_lib.c:PKCS7_SIGNER_INFO *PKCS7_add_signature(PKCS7 *p7, X509 *x509, EVP_PKEY *pkey, 
crypto/pkcs7/pk7_smime.c:  if (!(si = PKCS7_add_signature(p7,signcert,pkey, md))) 
crypto/pkcs7/pkcs7.h:PKCS7_SIGNER_INFO *PKCS7_add_signature(PKCS7 *p7, X509 *x509, 
crypto/pkcs7/pkcs7err.c:{ERR_FUNC(PKCS7_F_PKCS7_ADD_SIGNATURE), "PKCS7_add_signature"}, 
crypto/pkcs7/sign.c: si=PKCS7_add_signature(p7,x509,pkey,EVP_sha1()); 
crypto/ts/ts_rsp_sign.c:  if (!(si = PKCS7_add_signature(p7, ctx->signer_cert, 

: apps/에는 데모가 없습니다. "openssl smime ... [-md digest] ..." seems to be unknown option on the last version openssl을 참조하십시오. 조금 오래되었지만 여전히 유지되어야합니다.