用Openssl實現電子簽名 VC

2021-04-20 03:55:55 字數 1501 閱讀 9412

部落格:http://blog.csdn.net/wallimn

網路硬碟:

最近花了些時間研究了一下數字簽名,因為電子簽名在當今時代太重要了,電子商務、網上銀行、電子政務等,許多領域都離不開它。說到電子簽名,首先要介紹幾個基本概念。

一、對稱加密

所謂對稱加密,就是加密與解密使用同樣的鑰匙。對稱加密的特點:加密效率高,速度快,但是由於加解密使用同樣的鑰匙,如果保護金鑰的安全是個問題。

另:基於key的加密方式是加密學的極大乙個進步,因為key的更換是很容易的,而演算法的開發、更換是成本較高的。

二、非對稱加密

所謂非對稱加密,就是加密與解密使用不同的金鑰。最常見的演算法是rsa,以發明者命名。用一把鑰匙加密,則要用另外一把解密。兩把鑰匙一把為私鑰(自已用,自已掌握)、一把為公鑰(大家用,用的人都知道)。

三、摘要演算法

對文字或檔案,計算出一段固定長度資訊,稱之為摘要資訊,常用的演算法用:md5,sha1。不同的文字或者檔案摘要不同,摘要資訊就如同文件的指紋一樣。

所謂的電子簽名,就是先對文件計算摘要資訊,然後使用私鑰加密,這個過程就是電子簽名。驗證電子簽名的時候,使用公鑰解密簽名資訊得到摘要資訊,然後再自行對文件計算一次摘要資訊。兩個摘要資訊相同,則稱為電子簽名吻合。如果兩個摘要資訊相同,則說明文件未被修改過,且是由簽名者發出。

電子簽名與檔案簽名有相同之處,採用電子簽名也能確認以下兩點:

第一,資訊是由簽名者發出的;

第二,資訊由簽發後到收到為止未曾做過任何修改。

bio_read_filename(bp, filename);

if ((pkey = pem_read_bio_privatekey(bp, null, null, (char *)password))

== null)

bio_free(bp);

return (pkey);

}讀取公鑰的函式:

evp_pkey *loadpublickey(const char      *filename)

unsigned char dercert[4096];

unsigned long dercertlen;

dercertlen = fread(dercert,1,sizeof(dercert)/sizeof(dercert[0]),fp);

fclose(fp);

const unsigned char *ptmp = dercert;

x509 *x= d2i_x509(null,&ptmp,dercertlen);

if(x==null)

evp_pkey *pubkey =x509_get_pubkey(x);

return pubkey;

}部落格:http://blog.csdn.net/wallimn

網路硬碟:

用openssl自簽名證書

進入命令列 1.進入證書存放的路徑 rm rf ssl 假如ssl資料夾已經存在 mkdir ssl cd ssl 2.生成金鑰 openssl genrsa des3 out ssl.key 1024 輸入密碼 isec openssl rsa in ssl.key out ssl.key 輸入密...

iOS實現電子簽名

實現原理 1 使用拖動手勢記錄獲取使用者簽名路徑.2 當使用者初次接觸螢幕,生成乙個新的uibezierpath,並加入陣列中.設定接觸點為起點.在手指拖動過程中為uibezierpath新增線條,並重新繪製,生成連續的線.3 手指滑動中不斷的重新繪製,形成簽名效果.4 簽名完成,轉化為uiimag...

openssl 命令列實現數字簽名

一 傳送方a 生成私鑰 openssl genrsa passout pass 123456 out apri.pem 1024 生成公鑰 openssl rsa passin pass 123456 pubout in apri.pem out apub.pem 用b的公鑰加密資料 openssl...