【原創(chuàng)】RSA簽名測試工具,含源碼下載
發(fā)布日期:2022/11/17 作者:
瀏覽:954
很簡單的一個小工具,可以用來對數(shù)據(jù)進行RSA加密簽名操作,以防止數(shù)據(jù)被第三方篡改。
如上圖所示,在待簽數(shù)據(jù)中輸入要簽名的文本,然后點擊簽名按鈕,即可生成簽名數(shù)據(jù),默認簽名是byte[]形式,這里進行了base64轉(zhuǎn)碼,以方便顯示。點擊驗簽,如下圖所示
如果我們隨便改動一下原文的數(shù)據(jù),比如加一個空格,或是刪除一個回車,再次點擊驗簽按鈕,則會返回失敗提示。源碼如下:
using System.Security.Cryptography;
using System.Text;
namespace RSASignature
{
public partial class Form1 : Form
{
private string PubKeyXml="";//公鑰,在加簽時生成,可以發(fā)送給客戶驗驗
public Form1()
{
InitializeComponent();
}
private void bt_signa_Click(object sender, EventArgs e)
{
try
{
//獲取消息,追加簽名
string message = this.tb_data.Text;
var converter = new ASCIIEncoding();
byte[] plainText = converter.GetBytes(message);
var rsaWrite = new RSACryptoServiceProvider();
//生成私鑰,這個不能發(fā)給客戶
//var privateParams = rsaWrite.ExportParameters(true);
//生成的公鑰,可以發(fā)送給客戶
//var publicParams = rsaWrite.ExportParameters(false);
PubKeyXml = rsaWrite.ToXmlString(false);
//簽名
byte[] signature = rsaWrite.SignData(plainText, SHA1.Create());
this.tb_signatrue.Text=Convert.ToBase64String(signature);
var ttemp=Convert.FromBase64String(this.tb_signatrue.Text);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message+ex.InnerException?.Message);
}
}
private void bt_vert_Click(object sender, EventArgs e)
{
try
{
string message = this.tb_data.Text;
if (CheckSignatrue(message,Convert.FromBase64String(this.tb_signatrue.Text), PubKeyXml))
{
MessageBox.Show("簽名校驗通過!");
}
else
{
MessageBox.Show("簽名有誤!");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message+ex.InnerException?.Message);
}
}
private bool CheckSignatrue(string data, byte[] signature, RSAParameters PublicParameters)
{
try
{
var converter = new ASCIIEncoding();
byte[] plainText = converter.GetBytes(data);
var rsaRead = new RSACryptoServiceProvider();
rsaRead.ImportParameters(PublicParameters);
if (rsaRead.VerifyData(plainText, SHA1.Create(), signature))
{
return true;
}
else
{
return false;
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
private bool CheckSignatrue(string data, byte[] signature, string publicKey)
{
try
{
var converter = new ASCIIEncoding();
byte[] plainText = converter.GetBytes(data);
var rsaRead = new RSACryptoServiceProvider();
rsaRead.FromXmlString(publicKey);
if (rsaRead.VerifyData(plainText, SHA1.Create(), signature))
{
return true;
}
else
{
return false;
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
}
}
下拉加載更多評論