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