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

【原创】 RSA对文件进行签名操作

发布日期:2022/11/21 作者: 浏览:831

    先看看工具大概长啥样

    我们先选取一个文件,然后对文件进行签名,签名返回的是128位的byte[]数组,为了显示方便,我们进行编码转换,以base64 格式进行显示。当然,RSA签名是有私钥支持才可以的。用私钥签名,然后再用公钥进行验签操作。以下是相关代码

  

        //文件签名
        private void bt_filesignature_Click(object sender, EventArgs e)
        {
            try
            {
                if (File.Exists(this.tb_filepath.Text)==false)
                {
                    MessageBox.Show("请先选择一个有效的文件路径");
                    return;
                }
                byte[] data = File.ReadAllBytes(this.tb_filepath.Text);
                (byte[] signature, string PublicKey) = Tools.Signature(this.tb_prkey.Text,data);
                this.tb_signatrue.Text=Convert.ToBase64String(signature);
                this.tb_key_32.Text=Convert.ToBase64String(signature.Take(32).ToArray());
                this.tb_iv_16.Text=Convert.ToBase64String(signature.Skip(32).Take(16).ToArray());

            }
            catch (Exception ex)
            {
                this.tb_signatrue.Text=ex.Message+ex.InnerException?.Message;
            }
        }

签名成功后返回两个数据,一个是签名本身,一个是公钥,是返回给客户验签用的。

        public static (byte[],string) Signature(string PriKey, byte[] data)
        { 
            var rsaWrite = new RSACryptoServiceProvider();
            rsaWrite.FromXmlString(PriKey);
            string PublicKey = rsaWrite.ToXmlString(false);
            //签名
            byte[] signature = rsaWrite.SignData(data, SHA1.Create());
            return (signature ,PublicKey);
        }



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