C#中不使用BouncyCastle的C#数字签名有没有办法在不使用第三方BouncyCastle库的情况下读取自定义私钥并签署消息?(sha256哈希+使用私钥加密)从技术上讲,是的。根据您拥有的密钥类型,答案会变得更加棘手。PKCS#8PrivateKeyInfo(PEM"BEGINPRIVATEKEY")如果您有这种类型的文件,并且您使用的是.NET4.6或更高版本,那么可以。您需要使用DER编码(与PEM编码相比)的数据blob(如果是PEM,请参见下文)。使用(CngKeykey=CngKey.Import(blob,CngKeyBlobFormat.Pkcs8PrivateBlob))使用(RSArsa=newRSACng(key)){returnrsa.SignData(data,HashAlgorithmName.SHA256,RSASignaturePadding.Pkcs1);RSA需要4.6,ECDSA需要4.6.1,DSA需要4.6.2。PKCS#8EncryptedPrivateKeyInfo(PEM"BEGINENCRYPTEDPRIVATEKEY")恭喜,您的私钥传输非常强大。不幸的是,如果您想实际处理它,您将需要编写最多的代码。你不想处理它。您真的非常想看看如何加密pem证书中的私钥吗?,然后进行下一节硬道德的介绍。尽管如此,你的工作还是比工作多。您需要读取文件,了解加密方案和参数,解密blob,然后使用CNG读取PKCS#8,或者继续钻进兔子洞并享受文件解析器。PKCS#1RSAPrivateKey(PEM"BEGINRSAPRIVATEKEY")不幸的是,您处于“相对容易”和“相对困难”的交汇处,数学专业人士将其称为“留给读者的练习”。强烈考虑从EncryptedPrivateKeyInfo实现PFX方法。或者,您可以在自定义代码中执行此操作。自定义代码?好的,我们有。此时您需要的参考文本是ITU-T-RECX.680-201508。对象类型的ITU.T-RECX.690-201508RFC。好的,让我们继续。如果文件是PEM编码的(“——BEGINRSAPRIVATEKEY——”或“————BEGINPRIVATEKEY——”等),你需要“un-PEM”它。我们想要的部分是有效载荷。通过Convert.FromBase64String运行它,我们现在有一个用于密钥对象的DER编码字节[]。使用类型定义和ITU文档为您的密钥文件格式编写解析器。解析密钥。将解析的密钥转换为RSAParameters对象(或DSAParameters,或ECParameters,视情况而定)调用RSA.Create()(等)。通过ImportParameters方法加载密钥。很高兴去。对于第4步,有几件事需要注意。具体来说,ASN.1/DERINTEGER组件有两个RSAParameters不喜欢的规则。.NET期望该值为大端字节数组(与DER编码的字节顺序相同),具有以下关系:某些其他格式确定RFC为您的密钥格式定义了ASN.1结构,然后记住并评估RSAPrivateKey部分.DSAParameters和ECParameters都有自己的空间期望。进一步阅读其中一些包括并不总是优雅但经常有效的代码:Microsoft提供了一个SignedXML类来对文件进行签名。了解更多请访问https://msdn.microsoft.com/en-us/library/system.security.cryptography.xml.signedxml(v=vs.110).aspx以上是C#学习教程:c#ThedigitalBouncyCastle中的签名并没有使用BouncyCastle共享的所有内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
