小编and*_*sop的帖子

c#修改List <T>中的结构

简短问题:如何修改单个项目List?(或者更确切地说,struct存储在List?中的成员?)

完整说明:

首先,struct使用以下定义:

public struct itemInfo
{
    ...(Strings, Chars, boring)...
    public String nameStr;
    ...(you get the idea, nothing fancy)...
    public String subNum;   //BTW this is the element I'm trying to sort on
}

public struct slotInfo
{
    public Char catID;
    public String sortName;
    public Bitmap mainIcon;
    public IList<itemInfo> subItems;
}

public struct catInfo
{
    public Char catID;
    public String catDesc;
    public IList<slotInfo> items;
    public int numItems;
}

catInfo[] gAllCats = new catInfo[31]; …
Run Code Online (Sandbox Code Playgroud)

c# arrays foreach

15
推荐指数
1
解决办法
1万
查看次数

验证C#中使用BER/DER编码的ASN.1格式的DSA签名

如何在C#中验证DSA签名?

鉴于:

  • 消息文本,
  • 签名摘要(通常为ASN.1 DER格式),
  • 公钥(以签名的X.509证书,PEM或DER格式)

我尝试了很多方法,但没有取得任何成功:

  • OpenSSL.NET:库中的各种奇怪错误; 我在SourceForge上有一个与作者一起运行开放线程,但还没能解决这个问题.

  • Microsoft .NET API:无法解压缩DER签名以进行比较.DSA签名是40个字节(两个20字节整数),但是表示为两个整数的DER编码序列,因此总长度可以在46到48个字节之间(有关快速概述,请参阅此文章). NET包含解析ASN.1/DER的代码(因为它可以读取DER格式的证书),它深埋,并且无法访问它,因此您可以从ASN.1/DER编码的sig中正确检索40个字节.这个问题让我想到了下一个选择......

  • BouncyCastle:通过使用这些Org.BouncyCastle.Asn1函数,我可以解析ASN.1签名并将其拉入其组件R和S整数值.但是当我将这些传递给签名验证例程时,它没有给出任何解释.我不确定我做错了什么,因为C#API 完全没有文档记录,Java版本几乎没有记录(但是我找不到示例或HOWTO信息.)

我已经在这个问题上投入了大约一个星期了.我知道之前有人必须这样做,但我没有找到任何完整/有效的例子.

我有三个C#项目坐在这里,每个95%完成但有一个严重的缺陷导致它失败.任何工作示例代码都将非常受欢迎.

编辑:这是我正在尝试验证的签名示例,转换为Base64和ASCII十六进制以使其可用.这个特殊的一个是47字节,但是一个合适的解析器仍然必须接受它,在DER规范上读取更多信息(如果MSB为1,BER/DER添加前导00以确认符号)

Base64: MC0CFQCUgq2DEHWzp3O4nOdo38mDu8mStwIUadZmbin7BvXxpeoJh7dhquD2CTM=

ASCII Hex: 302d0215009482ad831075b3a773b89ce768dfc983bbc992b7021469d6666e29fb06f5f1a5ea0987b761aae0f60933
Run Code Online (Sandbox Code Playgroud)

结构符合DER规范; 它解析如下:

30 2d: sequence, length 45 (may vary from 44 to 46)
 02 15: integer, length 21 (first byte is 00 to confirm sign)
  009482ad831075b3a773b89ce768dfc983bbc992b7
 02 14: integer, length 20 (leading 00 not necessary for this one)
  69d6666e29fb06f5f1a5ea0987b761aae0f60933
Run Code Online (Sandbox Code Playgroud)

编写我自己的DER解析器实际上不是一个选项,错误的空间太大,必须有一种方法来正确地执行此操作.

.net c# asn.1 digital-signature

6
推荐指数
1
解决办法
6685
查看次数

如何使用BouncyCastle(C#)导入ASN.1格式的DSA签名

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 …
Run Code Online (Sandbox Code Playgroud)

.net c# bouncycastle asn.1

5
推荐指数
1
解决办法
3797
查看次数

标签 统计

c# ×3

.net ×2

asn.1 ×2

arrays ×1

bouncycastle ×1

digital-signature ×1

foreach ×1