• ASP.NET实现数字签名(转载)


    asp.net如何实现数字签名(DSACryptoServiceProvider)

    数字签名简单的说过程如下:

    发送者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 />
            原文:&nbsp;
            <asp:TextBox ID="tbxContent" runat="server" TextMode="MultiLine" Height="59px" Width="711px"></asp:TextBox>&nbsp;<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

    转自:http://www.cnblogs.com/skyaspnet/archive/2010/10/06/1844610.html
  • 相关阅读:
    一步步构建大型网站架构
    程序员技术练级攻略
    再谈“我是怎么招聘程序员的”
    os.path.basename()
    用pymysql实现的注册登录公告练习
    缓冲(cache)和缓存(buffer)
    数据库视图,触发器,事务,存储过程,函数,备份与恢复
    mysql用户管理和pymysql
    mysql重点,表查询操作和多表查询
    数据库的约束语句和表之间的关系
  • 原文地址:https://www.cnblogs.com/johnwonder/p/1885055.html
Copyright © 2020-2023  润新知