威势网络,为您的企业和团队注入互联网活力!
服务热线:138-9741-0341

【原创】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);
            }
        }
    }
}


RSA签名小工具及其源码下载


下拉加载更多评论
最新评论
暂无!