參考自openssl學習之使用個人資訊數字證書(pfx)進行簽名和驗證
但是原文有錯誤
故將修改後的重貼一遍
#pragma comment(lib, "ssleay32.lib")
bool dosigndata(const char* szpkcs12filename, const char* szpkcs12password,
const char* szunsigndata, char* szsigndata)
/*變數*/
int err;
unsigned int sig_len;
unsigned char sig_buf[128];
evp_md_ctx md_ctx;
evp_pkey * pkey = null;
file * fp = null;
x509 * x509 = null;
pkcs12* p12 = null;
stack_of(x509) *ca = null;
/*初始化*/
ssleay_add_all_algorithms();
err_load_crypto_strings();
/*讀取個人資訊證書並分解出金鑰和證書*/
if (!(fp = fopen(szpkcs12filename, "rb")))
p12 = d2i_pkcs12_fp(fp, null);
fclose (fp);
if (!p12)
if (!pkcs12_parse(p12, szpkcs12password, &pkey, &x509, &ca))
pkcs12_free(p12);
if (pkey == null)
/*簽名資料*/
evp_signinit (&md_ctx, evp_sha1());
evp_signupdate (&md_ctx, szunsigndata, strlen(szunsigndata));
sig_len = 128;
err = evp_signfinal (&md_ctx, sig_buf, &sig_len, pkey);
if (err != 1)
if (x509)
return false;
}memcpy(szsigndata, sig_buf, sig_len);
/*釋放相關變數*/
if (pkey)
if (x509)
return true;
}bool doverifydata(const char* szpkcs12filename, const char* szpkcs12password,
const char* szunsigndata, const char* szsigndata)
/*變數*/
int err;
unsigned int sig_len;
evp_md_ctx md_ctx;
evp_pkey * pkey = null;
file * fp = null;
x509 * x509 = null;
pkcs12* p12 = null;
stack_of(x509) *ca = null;
/*初始化*/
ssleay_add_all_algorithms();
err_load_crypto_strings();
/*讀取個人資訊證書並分解出金鑰和證書*/
if (!(fp = fopen(szpkcs12filename, "rb")))
p12 = d2i_pkcs12_fp(fp, null);
fclose (fp);
if (!p12)
if (!pkcs12_parse(p12, szpkcs12password, &pkey, &x509, &ca))
pkcs12_free(p12);
if (x509 == null)
/*驗證簽名*/
pkey=x509_get_pubkey(x509);
if (pkey == null)
return false;
}/* verify the signature */
sig_len = 128;
evp_verifyinit(&md_ctx, evp_sha1());
evp_verifyupdate(&md_ctx, szunsigndata, strlen(szunsigndata));
err = evp_verifyfinal (&md_ctx, (const byte*)szsigndata, sig_len, pkey);
evp_pkey_free (pkey);
if (err != 1)
return false;
}/*釋放相關變數*/
if (pkey)
return true;
}int main(int argc, char* argv)
else
printf("/n>------------after sign data--------------end/n");
if (!doverifydata("wanjl.pfx", "123456", "hi there, i love juan.", sig_buf)) else
}return 0;
}
openssl從PFX匯出私鑰 公鑰
從pfx提取金鑰資訊,並轉換為key格式 pfx使用pkcs12模式補足 1 提取金鑰對 如果pfx證書已加密,會提示輸入密碼。openssl pkcs12 in 1.pfx nocerts nodes out 1.key 2 從金鑰對提取私鑰 openssl rsa in 1.key out 1 ...
OpenSSL生成加密證書 cer和 pfx
linux自帶openssl,所以最好在linux平台操作 第一步 生成採用des3演算法保護的私鑰 openssl genrsa des3 out private rsa.key 1024 命令執行過程中的提示資訊enter pass phrase 的含義是輸入用來保護私鑰檔案的密碼 最好不要超過...
openssl從PFX匯出私鑰 公鑰
從pfx提取金鑰資訊,並轉換為key格式 pfx使用pkcs12模式補足 1 提取金鑰對 如果pfx證書已加密,會提示輸入密碼。openssl pkcs12 in 1.pfx nocerts nodes out 1.key 2 從金鑰對提取私鑰 openssl rsa in 1.key out 1 ...