數位簽章簡單的說過程如下:
寄件者A向接受者B發送資料,A首先將資料進行散列函數運算,產生資訊摘要,然後用私密金鑰進行加密,產生簽名資訊,A將要發送的資訊與簽名資訊一起發送給B,B接收到後,也將資料進行散列運行,並產生資訊摘要,然後用公開金鑰與簽名進行驗證核對資訊是否被撰改。
asp.net實現數位簽章執行個體代碼:
需引入命名空間:using System.Security.Cryptography;
以下為引用的內容: /// <summary> /// 產生簽名 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> 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)); } /// <summary> /// 隨機產生密鑰 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void btncreateMY_Click(object sender, EventArgs e) { DSACryptoServiceProvider objdsa = new DSACryptoServiceProvider(); tbxcreateMY_publicKey.Text = objdsa.ToXmlString(false); tbxcreateMY_key.Text = objdsa.ToXmlString(true); } /// <summary> /// 驗證簽名 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> 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> |
http://www.cn-web.com/shtml/article/net/quer/2009/07/28/921.shtml