精通pki網路安全認證技術與程式設計實現(讀書筆記5)

2021-05-26 06:59:45 字數 1557 閱讀 5200

第五章 openssl簽名和驗證

資料簽名其實就是對資料的摘要進行私鑰加密。驗證簽名就是解密簽名資料,和原始的摘要是否一樣。openssl中簽名,是先對原始資料計算摘要,再對摘要進行私鑰加密。驗證的過程是對原始訊息計算摘要,解密簽名值,和摘要對比是否一致。如果一致,說明簽名有效;否則,則認為原名 或簽名值被篡改。數字簽名結合數字證書可以實現身份認證、防篡改、防抵賴的功能。簽名的資料格式為pkcs#1。

#include 

#include

#include

#include

void tsign()

printf("

成功./n");

evpkey = evp_pkey_new();

//新建乙個evp_pkey變數

if(evpkey == null)

if(evp_pkey_set1_rsa(evpkey,rsa) != 1)

//儲存rsa結構體到evp_pkey結構體

//以下是計算簽名**

evp_md_ctx_init(&mdctx);

//初始化摘要上下文

if(!evp_signinit_ex(&mdctx, evp_md5(), null))

//簽名初始化,設定摘要演算法,本例為md5

if(!evp_signupdate(&mdctx, mess1, strlen(mess1)))

//計算簽名(摘要)update

if(!evp_signfinal(&mdctx,sign_value,&sign_len,evpkey))

//簽名輸出

printf("

訊息/"%s/"的簽名值是: /n",mess1);

for(i = 0; i < sign_len; i++)

printf("

/n");

evp_md_ctx_cleanup(&mdctx);

printf("

/n正在驗證簽名.../n");

//以下是驗證簽名**

evp_md_ctx_init(&mdctx);

//初始化摘要上下文

if(!evp_verifyinit_ex(&mdctx, evp_md5(), null))

//驗證初始化,設定摘要演算法,一定要和簽名一致。

if(!evp_verifyupdate(&mdctx, mess1, strlen(mess1)))

//驗證簽名(摘要)update

if(!evp_verifyfinal(&mdctx,sign_value,sign_len,evpkey))

//驗證簽名

else

//釋放記憶體

evp_pkey_free(evpkey);

rsa_free(rsa);

evp_md_ctx_cleanup(&mdctx);

return;

} int main()

gcc main.c -lssl

精通pki網路安全認證技術與程式設計實現(讀書筆記3)

第四章 openssl訊息摘要 1.訊息摘要 訊息摘要就是把不定長的資料通過數學變化為固定長度的短資料。原始訊息的任何一點改動都會使訊息摘要值發生很大變化。訊息摘要具有不可逆性。2.函式 常用的函式包括evp md ctx init evp digestinit ex evp digestupdat...

PKI 技術實現網路安全

0 預備知識 對稱加密 加密金鑰和解密金鑰是同乙個金鑰,金鑰維護工作量大n個人就有n n 1 2個金鑰,加密效率高,不適合網際網路傳輸金鑰 非對稱加密 公鑰和私鑰成對出現 公鑰推導不出私鑰 公鑰加密私鑰解密,私鑰加密公鑰解密 公鑰不能解公鑰,私鑰不能解私鑰,每個使用者乙個非對稱金鑰,適合在網際網路上...

網路安全 PKI

網路安全 pki 我們都知道,計算機網路上沒有絕對的安全,所以為咯實現資料安全傳輸,只有通過各種加密傳輸盡可能保證資料完整性和真實性。常見的加密演算法有單向加密,對稱加密,非對稱加密。單向加密一般用於資料完整性 提取特徵碼 對稱加密速度快,一般用於資料加密 非對稱加密速度慢,一般只用於身份驗證。現在...