asp.net如何实现数字签名(DSACryptoServiceProvider)
2009-09-10 13:46:17| 分类: ASP.NET/C# | 标签: |字号大中小 订阅
数字签名简单的说过程如下:
发送者A向接受者B发送数据,A首先将数据进行散列函数运算,生成信息摘要,然后用私钥进行加密,生成签名信息,A将要发送的信息与签名信息一起发送给B,B接收到后,也将数据进行散列运行,并生成信息摘要,然后用公钥与签名进行验证核对信息是否被撰改。
asp.net实现数字签名实例代码:
需引入命名空间:using System.Security.Cryptography;
以下为引用的内容: /// /// 生成签名 /// /// /// protected void Button1_Click(object sender, EventArgs e) { DSACryptoServiceProvider objdsa = new DSACryptoServiceProvider(); objdsa.FromXmlString(tbxKey.Text); byte[] source = System.Text.UTF8Encoding.UTF8.GetBytes(tbxContent.Text); //数字签名 tbxSign.Text = BitConverter.ToString(objdsa.SignData(source)); } /// /// 随机生成密钥 /// /// /// protected void btncreateMY_Click(object sender, EventArgs e) { DSACryptoServiceProvider objdsa = new DSACryptoServiceProvider(); tbxcreateMY_publicKey.Text = objdsa.ToXmlString(false); tbxcreateMY_key.Text = objdsa.ToXmlString(true); } /// /// 验证签名 /// /// /// protected void Button3_Click(object sender, EventArgs e) { DSACryptoServiceProvider objdsa = new DSACryptoServiceProvider(); byte[] fileHashValue = new SHA1CryptoServiceProvider().ComputeHash(System.Text.UTF8Encoding.UTF8.GetBytes(tbxContentYZ.Text)); string[] strSplit = tbxSignYZ.Text.Split('-'); byte[] SignedHash = new byte[strSplit.Length]; for (int i = 0; i < strSplit.Length; i++) SignedHash[i] = byte.Parse(strSplit[i], System.Globalization.NumberStyles.AllowHexSpecifier); objdsa.FromXmlString(tbxPublickeyYZ.Text); bool ret = objdsa.VerifySignature(fileHashValue, SignedHash); Qcd.Core.Web.Messages.ShowDialog(ret.ToString()); }
html页面代码: <form id="form1" runat="server"> 随机生成密钥:<asp:Button ID="btncreateMY" runat="server" Text="随机生成密钥" OnClick="btncreateMY_Click" /><br /> 公钥:<asp:TextBox ID="tbxcreateMY_publicKey" runat="server" TextMode="MultiLine" Height="59px" ReadOnly="True" Width="711px"></asp:TextBox><br /> 私钥:<asp:TextBox ID="tbxcreateMY_key" runat="server" TextMode="MultiLine" Height="59px" ReadOnly="True" Width="710px"></asp:TextBox><br /><hr /> <br /> 生成签名:<br /> 原文: <asp:TextBox ID="tbxContent" runat="server" TextMode="MultiLine" Height="59px" Width="711px"></asp:TextBox> <br /> 私钥: <asp:TextBox ID="tbxKey" runat="server" TextMode="MultiLine" Height="59px" Width="711px"></asp:TextBox><br /> 签名: <asp:TextBox ID="tbxSign" runat="server" TextMode="MultiLine" Height="59px" ReadOnly="True" Width="711px"></asp:TextBox> <br /> <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="生成签名" /> <br /> <br /><hr /> <br /> 验证签名:<br /> 原文:<asp:TextBox ID="tbxContentYZ" runat="server" TextMode="MultiLine" Height="59px" Width="711px"></asp:TextBox><br /> 公钥:<asp:TextBox ID="tbxPublickeyYZ" runat="server" TextMode="MultiLine" Height="59px" Width="711px"></asp:TextBox><br /> 签名:<asp:TextBox ID="tbxSignYZ" runat="server" TextMode="MultiLine" Height="59px" Width="711px"></asp:TextBox> <br /> <asp:Button ID="Button3" runat="server" OnClick="Button3_Click" Text="验证签名" /> </form>