1、rsa加密過程簡述
a和b進行加密通訊時,b首先要生成一對金鑰。乙個是公鑰,給a,b自己持有私鑰。a使用b的公鑰加密要加密傳送的內容,然後b在通過自己的私鑰解密內容
2、假設a要想b傳送訊息,a會先計算出訊息的訊息摘要,然後使用自己的私鑰加密這段摘要加密,最後將加密後的訊息摘要和訊息一起傳送給b,被加密的訊息摘要就是「簽名」。
b收到訊息後,也會使用和a相同的方法提取訊息摘要,然後使用a的公鑰解密a傳送的來簽名,並與自己計算出來的訊息摘要進行比較。如果相同則說明訊息是a傳送給b的,同時,a也無法否認自己傳送訊息給b的事實。
其中,a用自己的私鑰給訊息摘要加密成為「簽名」;b使用a的公鑰解密簽名檔案的過程,就叫做「驗籤」。
3、簽名過程
1)a提取訊息m的訊息摘要h(m),並使用自己的私鑰對摘要h(m)進行加密,生成簽名s
2)a將簽名s和訊息m一起,使用b的公鑰進行加密,生成密文c,傳送給b。
具體:1.a計算訊息m的訊息摘要,記為 h(m)
2. a使用私鑰(n,d)對h(m)加密,生成簽名s ,s滿足:
s=(h(m))^d mod n;
由於a是用自己的私鑰對訊息摘要加密,所以只用使用s的公鑰才能解密該訊息摘要,這樣a就不可否認自己傳送了該訊息給b。
a傳送訊息和簽名(m,s)給b。
4、驗證過程
1)b接收到密文c,使用自己的私鑰解密c得到明文m和數字簽名s
2)b使用a的公鑰解密數字簽名s解密得到h(m).
3)b使用相同的方法提取訊息m的訊息摘要h(m)
4)b比較兩個訊息摘要。相同則驗證成功;不同則驗證失敗。
具體:1.b計算訊息m的訊息摘要,記為h(m);
2.b使用a的公鑰(n,e)解密s,得到
h(m) = s^e mod n;
3.b比較h(m)與h(m),相同則證明
using system;
using system.collections.generic;
using system.componentmodel;
using system.data;
using system.drawing;
using system.linq;
using system.text;
using system.windows.forms;
using system.security.cryptography;
using system.io;
namespace sectest
hexstring = strb.tostring();
}return hexstring;
}public rsasv()
private void button1_click(object sender, eventargs e)
private void button2_click(object sender, eventargs e)
private void button3_click(object sender, eventargs e)
catch
finally
byte signdata = rsa1.signdata(data, sh);
textbox4.text =convert.tobase64string(signdata);
}private void button4_click(object sender, eventargs e)
}private void button5_click(object sender, eventargs e)
catch
finally
filestream fkeyin = new filestream("c:\\rsakey1.dat", filemode.open, fileaccess.read);
long keyl=fkeyin.length;
byte key_buf = new byte[keyl];
fkeyin.read(key_buf, 0, (int)keyl);
string strpublickey;
strpublickey = system.text.encoding.default.getstring(key_buf);
rsacryptoserviceprovider rsa1 = new rsacryptoserviceprovider();
rsa1.fromxmlstring(strpublickey);
byte data = convert.frombase64string(textbox4.text);
sha1 sh = new sha1cryptoserviceprovider();
result = rsa1.verifydata(data, sh, data);
if (result)
textbox5.text = "驗證通過。";
else
textbox5.text = "驗證失敗。";}}
}
rsa加密 簽名解釋
rsa的公鑰和私鑰到底哪個才是用來加密和哪個用來解密?我們來回顧一下rsa的加密演算法。我們從公鑰加密演算法和簽名演算法的定義出發,用比較規範的語言來描述這一演算法。rsa公鑰加密體制包含如下3個演算法 keygen 金鑰生成演算法 encrypt 加密演算法 以及decrypt 解密演算法 所以,...
rsa加解密,簽名
一 公鑰加密 假設一下,我找了兩個數字,乙個是1,乙個是2。我喜歡2這個數字,就保留起來,不告訴你們 私鑰 然後我告訴大家,1是我的公鑰。我有乙個檔案,不能讓別人看,我就用1加密了。別人找到了這個檔案,但是他不知道2就是解密的私鑰啊,所以他解不開,只有我可以用 數字2,就是我的私鑰,來解密。這樣我就...
RSA簽名php實現
介面資料加上簽名,可以防止別人篡改資料,過濾非法請求。param data array 需要加密的陣列 function getsign data,private key param data array 需要加密的陣列 return bool 是否驗證通過 function checksign d...