【原創(chuàng)】RSA簽名測試工具,含源碼下載
發(fā)布日期:2022/11/17 作者:
瀏覽:890
很簡單的一個小工具,可以用來對數(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); } } } }
下拉加載更多評論