2014-06-11 19 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); 

實施是在pk7_lib.c,可在<openssl dir>/crypto/pkcs7/pk7_lib.c找到。功能不多。它看起來像是由PKCS7_SIGNER_INFO_set完成的。

它用在圖書館的一些地方。有一個在apps/沒有演示:

$ 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, 

openssl cms命令應該讓你在命令行中運行。請參閱"openssl smime ... [-md digest] ..." seems to be unknown option on the last version openssl。它有點舊,但它應該仍然成立。