C#编程总结(八)数字签名停留的风

数字签名基于哈希算法和公钥加密算法,对明文报文先用哈希算法计算摘要,然后用私钥对摘要进行加密,得到的值就是原文的数字签名。

数字签名(又称公钥数字签名、电子签章)是一种类似写在纸上的普通的物理签名,但是使用了公钥加密领域的技术实现,用于鉴别数字信息的方法。

一套数字签名通常定义两种互补的运算,一个用于签名,另一个用于验证。

可以由下图表示电子签名的用处:

流程图如下:

数字签名的使用一般涉及以下几个步骤,我们通过安全电子邮件为案例进行介绍

(1)发件人生成或取得独一无二的加密密码组,包括私钥和公钥。

(2)发件人书写电子邮件

(3)发件人用安全的摘要算法获取电子邮件的信息摘要

(4)发件人再使用私钥对信息摘要进行加密,即可得到数字签名。

(5)发件人将数字签名附在信息之后.

(6)发件人将数字签名和信息(加密或未加密)发送给电子收件人.

(7)收件人使用发件人的公共密码(公钥)确认发件人的电子签名,即将发件人的数字签名通过公钥进行解密,得到信息摘要

(8)收件人使用同样安全的摘要算法,获取信息(加密或未加密)的"信息摘要".

(9)收件人比较两个信息摘要.假如两者相同,则收件人可以确信信息在签发后并未作任何改变

(10)收件人从证明机构处获得认证证书(或者是通过信息发件人获得),这一证书用以确认发件人发出信息上的数字签名的真实性.证明机构在数字签名系统中是一个典型的受委托管理证明业务的第三方.该证书包含发件人的公共密码和姓名(以及其他可能的附加信息),由证明机构在其上进行数字签名.

其中,第(1)~(6)是数字签名的制作过程,(7)~(10)是数字签名的核实过程

1、防冒充,因为私钥只有签名者自己知道,其他人不能伪造出正确的签名2、可鉴别身份,接收方用发送方的公开公钥对报文签名进行解密运算后,和原文进行匹配3、防篡改,明文和签名值一起发送,相互验证,防止数据被篡改4、防抵赖,签名值可以鉴别身份,带签名的数据里包含的信息签名者是不能抵赖的

现在典型的应用如:网上银行、电子商务、电子政务、网络通信等

数字签名

///

///数字签名//////原文///私钥///签名publicstaticstringHashAndSignString(stringplaintext,stringprivateKey){UnicodeEncodingByteConverter=newUnicodeEncoding();byte[]dataToEncrypt=ByteConverter.GetBytes(plaintext);using(RSACryptoServiceProviderRSAalg=newRSACryptoServiceProvider()){RSAalg.FromXmlString(privateKey);//使用SHA1进行摘要算法,生成签名byte[]encryptedData=RSAalg.SignData(dataToEncrypt,newSHA1CryptoServiceProvider());returnConvert.ToBase64String(encryptedData);}}

签名认证:

///

///验证签名//////原文///签名///公钥///publicstaticboolVerifySigned(stringplaintext,stringSignedData,stringpublicKey){using(RSACryptoServiceProviderRSAalg=newRSACryptoServiceProvider()){RSAalg.FromXmlString(publicKey);UnicodeEncodingByteConverter=newUnicodeEncoding();byte[]dataToVerifyBytes=ByteConverter.GetBytes(plaintext);byte[]signedDataBytes=Convert.FromBase64String(SignedData);returnRSAalg.VerifyData(dataToVerifyBytes,newSHA1CryptoServiceProvider(),signedDataBytes);}}
THE END
1.在MFC中如何验证C#强命名库2. PublicKeyToken 的作用 PublicKeyToken是公钥的简化形式(通常为 8 字节的十六进制字符串),它是程序集强命名签名的重要部分,用于标识程序集的签名唯一性。例如,31bf3856ad364e35是一个典型的 PublicKeyToken。 3. 如何获取 PublicKeyToken? 方法1:使用sn.exe工具 https://blog.csdn.net/wojiuguowei/article/details/144405911
2.C#变量命名规范的重要性编程语言遵循一致的命名规范有助于在整个项目中保持代码风格的一致性。这种一致性不仅提高了代码的质量,还有助于减少因命名不一致而导致的错误和混淆。 总之,C#变量命名规范对于提升软件开发的质量和效率具有重要作用。通过遵循这些规范,开发者可以创建出更加清晰、易于理解和维护的代码。https://www.yisu.com/jc/936345.html
3.哪些嘲下使用代码签名证书比较好固件典型问题内部软件分发:互联网IT行业必须确保应用于整个业务的任何内部脚本或实用程序都经过数字签名,以防止内部用户或外部威胁篡改。代码签名证书可以标识开发者真实身份,确保代码完整性,从而保障内部软件的安全分发。 二、银行金融行业 金融应用安全:根据金融监管总局的相关要求,移动应用APP需要加强网络安全管理,监测识别恶意程序、攻https://www.163.com/dy/article/JJA7JIDE0511L2E2.html
4.C#验证PDF签名C#验证PDF签名 试图验证PDF签名不起作用。 PDF由Adobe Acrobat签名,然后尝试使用客户端证书的公钥进行验证。 因此,我获得了客户端证书的公钥,哈希PDF并验证哈希是否等于PDF签名,但失败了。 HttpClientCertificate cert = request.ClientCertificate; X509Certificate2 cert2 =newX509Certificate2(cert.Certificate);https://www.pianshen.com/question/42542039700/
5.VSCode的launch.json进行高效代码调试:配置和原理解析launch.json文件是用于配置 VS Code 调试会话的核心文件,它采用 JSON(JavaScript Object Notation)格式存储。在这一章节中,我们将深入探讨launch.json文件的结构、字段的含义和作用,帮助你更好地理解和配置调试环境。 文件结构和基本组成 launch.json文件的整体结构通常由一个 JSON 对象组成,该对象内包含一个名为confighttps://xie.infoq.cn/article/183b37b4d36785b3f18f7e5c1
6.干货C#自定义特性(Attribute)讲解与实际应用我们直接从实战中来了解特性意义,针对前两天我们发的一个通讯签名的问题《C#根据类生成签名字符串》和《Android根据类生成签名字符串》,当我们C#后端和Android前端类是一致的时候,根据类型动态生成签名那没有问题。 但是实际情况往往不是这样的,我们看看android的类 https://cloud.tencent.com/developer/article/1471809
7.毕业设计开题报告(集合15篇)通过使用考勤管理系统软件,企业可以不耗费人力去专门进行员工考勤的查询,而通过打卡记录来了解每个员工全部的出勤情况,将出勤情况与员工工资、奖金挂钩,达到正负激励作用,能够通过所有员工的出勤记录比较来发现企业管理和员工作业方面的诸多问题,更是员工工资及福利待遇方面重要的参考依据,从而更好促进工作质量的提高,增加企业https://www.ruiwen.com/kaitibaogao/6165819.html
8.c#签名C#签名的作用和重要性: 重载支持:通过不同的签名,可以在同一个类中定义多个同名但参数列表不同的方法,实现方法重载。 类型安全:签名有助于在编译时检查调用是否合法,确保传递的参数类型和数量与预期匹配。 反射和序列化:在反射和序列化过程中,签名用于识别特定的成员。 接口和继承:在实现接口或重写基类方法时,签https://agents.baidu.com/content/question/bb132fe4ee7360377c450e77
9.C#中的方法签名是什么?签名指的是返回值和参数。 比如 public void A ( int p1,int p2){}和 public void B https://www.imooc.com/wap/wenda/id/446787
10.C#自定义签名章实现方法C#教程这篇文章主要介绍了C#自定义签名章实现方法,涉及C#图形绘制的相关实现技巧,非常具有实用价值,需要的朋友可以参考下GPT4.0+Midjourney绘画+国内大模型 会员永久免费使用!【 如果你想靠AI翻身,你先需要一个靠谱的工具!】 本文实例讲述了C#自定义签名章实现方法。分享给大家供大家参考。具体实现方法如下: 1 2 3 4 5https://www.jb51.net/article/71402.htm
11.c#手写签名打印并上传(asp.net)开发实例源码下载<!--签名区域--> <!--打印区域--> <!--把Jqurey引入到项目中--> <!--把jSignature引入到项目中--> https://www.haolizi.net/example/view_149305.html
12.PHP,C#和JAVARSA签名及验签PHP,C# 和JAVARSA签名及验签 这个功能网上搜了好多资料。贡献一下,转载须注明并对卓二妹的无私奉献表示感谢。 1)签名算法使用SHA1withRSA。 2)签名后的数据位base64编码的密文字符串。 3)三个环境进行签名的私钥的格式不同,需要openssl工具进行转换。https://www.iteye.com/blog/wx1569592809-2502487
13.C#调用openssl签名与验签文件/// /// 签名文件 /// /// 源文件 /// 生成的签名文件 public void WriteSignFile(string sourceFileName, string fileName) { try { string sourceFilePath = Path.Combine(_config.ReqFileDir, sourceFileName); // 设置要签名的源文件路径var filePath = Path.Combine(_config.ReqFileDir, filehttps://zhuanlan.zhihu.com/p/680964904
14.C#支付宝签名异常RSA签名遭遇异常,请检查私钥格式是否正确。不私钥数据缺失,或者多个几个数据信息,请详细核实看下,如核实不到请提供密钥信息以及请求代码参数到 https://open.alipay.com/portal/forum/post/68401023
15.C#程序脱壳,去除强签名由于.net程序的运行机制,利用Reflector,ilspy等反射工具很容易就能看到原代码。很多程序都做了代码混淆,加壳。代码混淆后反编译乱码,不容易理解;加壳使反编译工具不能正常反射,提示无效的程序集。 有些程序还用了强名称程序集 需要做的就是:脱壳、去除强名称、反编译 http://modb.pro/db/180960
16.在C#中使用BouncyCastle对数据进行签名和验证using Org.BouncyCastle.Asn1;using Org.BouncyCastle.Asn1.X509;using Org.BouncyCastle.Crypto;using Org.BouncyCastle.Crypto.Encodings;using Org.BouncyCastle.Crypto.Engines;using Org.BouncyCastle.Crypto.Generators;using Org.BouncyCastle.Crypto.Parameters;using Org.BouncyCastle.Crypto.Prng;using Org.BouncyCastle.Mahttps://www.jianshu.com/p/b2614dbfb5cd
17.标准共识评级调整:NEO中心化风险较高3.最后就是安全性的问题。编译器以及虚拟机有一大作用就是过滤掉有 bug 的代码,但即使如此程序还是时常有 bug。现在 NEO 用一款高级语言去开发智能合约,机器难以检查出的错误的情况在所难免,导致 NEO 主链本身的潜在风险增加。如果没有很好的安全保护措施,被攻击的概率便会增高。 https://maimai.cn/article/detail?fid=771864956&efid=NhrLTJ0ZVH1txdiwq1-8iQ
18.C#GAC51CTO博客C# 生成强命名程序集并添加到GAC 针对一些类库项目或用户控件项目(一般来说,这类项目最后编译生成的是一个或多个dll文件),在程序开发完成后,有时需要将开发的程序集(dll文件)安装部署到GAC(全局程序集缓存)中,以便其他的程序也可以调用。 一、GAC的作用 https://blog.51cto.com/u_15127650/4325946