OpenSSL學習之使用PFX證書進行簽名和驗證

2021-05-24 02:39:31 字數 2808 閱讀 8018

參考自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 ...