博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数字签名实例
阅读量:4619 次
发布时间:2019-06-09

本文共 2592 字,大约阅读时间需要 8 分钟。

 数字签名具体的好处就不说了,看了很多文章,网络上各种图,理解起来可能比较麻烦,在这里简单说一下原理,减少大家的误区,纯属个人理解,欢迎纠正:

A给B发送信息,A会将信息用A的密码进行加密,然后将加密后的字符串和原文一起发给B,然后B用B的密码进行解密,然后判断解密后的字符串和A发过来的原文比对是否一致,关键问题在于,
A和密码和B的密码不一样,这个才是数字签名的精华,A的密码就是私钥,B的密码就是公钥

具体步骤:

生成一个私钥和公钥,A就用私钥进行加密,因为A的私钥只有A自己有,所以加密后的字符串就是A的签名字符串,然后A将这个签名的字符串和原文发给B,

B获取加密的字符串用公钥进行解密,然后判断解密后的字符串和原文是否一致,一致说明是A签名的,否则就不是A签名的

 

如果看的还有点迷糊,那么看完下面的例子,在去看上面的文字,估计就明白了

例如:私钥为S1,公钥为:G1  A的原文是:123   那么这个流程就是

  S1+123 加密生成一个A签名的字符串:AXXXX
  A将AXXXX和123一起发给B,B用G1将AXXXX进行解密,判断解密后的字符串是否等于123

 

相信原理大家都明白了吧。。。明白原理了就好,。呵呵。。。其他的不说了,上代码。。。代码是学习别人的。。已经过测试。

 

 

aspx代码:

随机生成密钥:
公钥:
私钥:

生成签名:
原文: 
 
私钥:
签名:

验证签名:
原文:
公钥:
签名:

.CS代码

///         /// 生成签名        ///         ///         ///         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);            Response.Write(ret.ToString());           // Qcd.Core.Web.Messages.ShowDialog(ret.ToString());        }

 

转载于:https://www.cnblogs.com/AK2012/archive/2012/06/06/2012-0606.html

你可能感兴趣的文章
C#基础-连接Access与SQL Server
查看>>
autofac
查看>>
MacOS 系统终端上传文件到 linux 服务器
查看>>
Excel导出POI
查看>>
兼容性
查看>>
自动执行sftp命令的脚本
查看>>
转 Merkle Tree(默克尔树)算法解析
查看>>
网络编程基础之socket编程
查看>>
各种浏览器的user-agent和
查看>>
Restful levels
查看>>
Phonegap移动开发:布局总结(一) 全局
查看>>
Java 变参函数的实现
查看>>
nrf51 SDK自带例程的解读
查看>>
SESSION技术
查看>>
数据结构(五)之直接插入排序
查看>>
SQL函数——LENGTH()和LENGTHB()
查看>>
vim - manual -个人笔记
查看>>
详解Javascript中prototype属性(推荐)
查看>>
angularjs实现首页轮播图
查看>>
Git 对象 和checkout 和stash的笔记
查看>>