一、名詞解釋
公鑰rsa 金鑰體系中對外公開的部分,通常用於資料加密、驗證數字簽名。
私鑰rsa 金鑰體系中非公開的部分,通常用於資料解密、資料簽名。
數字簽名
就是只有資訊的傳送者才能產生的,別人無法偽造的一段數字串,它同時也是對傳送者傳送的資訊的真實性的乙個證明。
二、為什麼要使用簽名
在系統間報文互動為保證上送報文可靠性[防止中間人攻擊],通常做法是在報文中加上校驗字[數字簽名],並約定好相關演算法。
三、實現
為方便系統間互動,本文直接講述原理,對於rsa_sign 及 rsa_verify的使用下期進行介紹。
簽名對需要上送的報文[en_data]計算特徵值[sign_block],相關演算法包括[md5、sha1、sha256、sha512等等]。
使用私鑰[pri_key]對sign_block加密獲得數字簽名[sign]。
將sign與en_data打包傳送給對方。
驗籤解析收到的報文,拆分為sign 及 en_data。
對en_data計算特徵值[sign_block],相關演算法包括[md5、sha1、sha256、sha512等等雙方協商]。
使用公鑰[pub_key]對sign解密,獲得sign_block1。
比較sign_block 和 sign_block1,若匹配則驗證成功,報文未被篡改。
生成公私鑰對int rsa_gen_der_key(int key_length, unsigned char * prik, unsigned char * pubk) elseelse{
memcpy(ming + rsa_j,rsa_out,iret);
rsa_j += iret;
if (pubk)
free(pubk);
if (pubkey)
rsa_free(pubkey);
return iret;
誤區公鑰[pub_key]、私鑰[pri_key]在金鑰體系中是平等的;並不是公鑰只能加密,私鑰只能解密;私鑰也可以用來加密,然後使用公鑰解密,只不過我們對這一操作區了個別名叫[簽名]和[驗籤]。
RSA簽名與驗籤
rsa演算法除了可以進行加解密以外,還可以用來簽名與驗籤。rsa用來進行簽名與驗簽時是使用私鑰進行簽名,公鑰進行驗籤的。這點與加解密的時候剛好相反。加解密時使用公鑰加密,私鑰解密。簽名和驗籤是通過signature物件進行的。以下是乙個使用signature進行簽名的示例。初始化signature時...
RSA簽名,驗籤的理解
假設一下,我找了兩個數字,乙個是1,乙個是2。我喜歡2這個數字,就保留起來,不告訴你們 私鑰 然後我告訴大家,1是我的公鑰。我有乙個檔案,不能讓別人看,我就用1加密了。別人找到了這個檔案,但是他不知道2就是解密的私鑰啊,所以他解不開,只有我可以用 數字2,就是我的私鑰,來解密。這樣我就可以保護資料了...
RSA簽名和驗籤說明
最近遇到乙個專案,需要進行rsa的驗籤,rsa的金鑰為2048位即256個位元組長。上游是先對乙個檔案進行sha256做hash,得到32位元組的摘要,然後進行填充,填充規則為前面兩個位元組為0x00,0x01,然後填充全ff,接下來是32位元組的摘要資料,這樣填充之後的總資料長度為256位元組,然...