【原创】RSA签名测试工具,含源码下载
发布日期:2022/11/17 作者:
浏览:889
很简单的一个小工具,可以用来对数据进行RSA加密签名操作,以防止数据被第三方篡改。
如上图所示,在待签数据中输入要签名的文本,然后点击签名按钮,即可生成签名数据,默认签名是byte[]形式,这里进行了base64转码,以方便显示。点击验签,如下图所示
如果我们随便改动一下原文的数据,比如加一个空格,或是删除一个回车,再次点击验签按钮,则会返回失败提示。源码如下:
using System.Security.Cryptography; using System.Text; namespace RSASignature { public partial class Form1 : Form { private string PubKeyXml="";//公钥,在加签时生成,可以发送给客户验验 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(); //生成私钥,这个不能发给客户 //var privateParams = rsaWrite.ExportParameters(true); //生成的公钥,可以发送给客户 //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); } } } }
下拉加载更多评论