and*_*sop 5 .net c# bouncycastle asn.1
OpenSSL以及大多数其他DSA实现以ASN.1格式输出签名.因此,由于ASN.1结构头,40字节签名(两个20字节整数)变为46字节.(有关详细信息,请参阅此论坛帖子.)
我的问题是,如何在C#中处理这种格式?(或其他地方,就此而言)
我花了一些时间尝试使用.NET System.Security.Crypto软件包处理它,但放弃了(非常令人沮丧,因为它显然有内部代码来解析ASN.1,因为它可以读取DER格式,但是没有办法让你使用它 - 但我离题了...)
然后,我开始使用BouncyCastle C#库.我可以把它变成一个Asn1Object,如果我在调试时展开它,我看到它包含一个DerSequence带有两个整数,但我怎么把它拉出来(最好是BigIntegers这样我可以把它们送到DSA.VerifySignature?)
代码示例:
Byte[] msgText = ReadFile("test_msg.txt");
Byte[] msgSigRaw = ReadFile("test_sig_1.bin"); // reads binary ASN.1 sig using FileStream
Asn1Object sigASN = Asn1Object.FromByteArray(msgSigRaw); // parses into Asn1Object
...
X509Certificate implCert = ReadCertificate("pubcert_dsa.cer"); // cert in DER format
DsaSigner DSA = new DsaSigner();
DSA.Init(false, implCert.GetPublicKey());
...
BigInteger sigIntR, sigIntS;
... //TODO: how to get signature from sigASN into sigIntR, sigIntS?
Boolean validSig = DSA.VerifySignature(msgText, sigIntR, sigIntS); // my goal
Run Code Online (Sandbox Code Playgroud)
看看这篇 CodeProject 文章:http://www.codeproject.com/KB/security/CryptoInteropSign.aspx
它包含将 DSA 签名转换为 C# 中所需的 P1363 格式的代码。
| 归档时间: |
|
| 查看次数: |
3797 次 |
| 最近记录: |