当前位置: 首页 > 编程语言 > C#

C#——如何计算特定哈希算法的ASN.1DER编码?分享

时间:2023-04-11 12:11:58 C#

C#-如何计算特定哈希算法的ASN.1DER编码?给定像SHA1或SHA256这样的哈希算法,我将如何获得RFC3447中定义的ASN.1DER编码?(参见第42页-链接)以下是所需的输出。MD53020300c06082a864886f70d020505000410SHA-13021300906052b0e03021a05000414SHA-2563031300d0648020105000420SHA-3843041300d060960864801650304020205000430SHA-5123051300d06096086480301'0400希望在C#中有一些聪明的方法可以做到这一点,不需要我将Oid写入ASN.1DER转换例程(或对它们进行硬编码)。有任何想法吗?这会让你参与其中:stringoidString=CryptoConfig.MapNameToOID(hashName);//fx"MD5"byte[]encodedOid=CryptoConfig.EncodeOID(oidString);//给你fx06082a864886f70d0205然后你只需要将它(3030050004)插入到SEQUENCE头中。当然,如果您想创建RSAPKCS#1v1.5签名,最好只使用RSAPKCS1SignatureFormatter。编辑:更多详细信息:您要编码的ASN.1是这样的:DigestInfo::=SEQUENCE{digestAlgorithmAlgorithmIdentifier,digestOCTETSTRING}其中AlgorithmIdentifier::=SEQUENCE{algorithmOBJECTIDENTIFIER,parametersANYDEFINEDBYalgorithmOPTIONAL所以从内部开始:digest-AlgorithmIdentifier包括SEQUENCE-tag(30),长度(我们会回到那里),OID和一些参数。fxSHA-1的OID为1.3.14.3.2.26,编码为06052b0e03021a(OID-tag06,长度为5,OID的编码)。所有常用的哈希函数都将NULL作为参数,编码为0500。所以AlgorithmIdentifier包含9个字节-这就是上面所做的。我们现在可以继续处理DigestInfo的其余部分:一个包含哈希值的OCTETSTRING。SHA-1的20字节散列将被编码为0420。DigestInfo的内容长度现在是11+22bytes()。我们需要使用SEQUENCE-标签启动DigestInfo,所以我们最终得到:3021300906052b0w02011a05000420。如果您需要自己生成它,您现在应该能够看到length2=encodedOid.Length+2和length=length2+2+2+hashlength。如果您需要有关ASN.1编码的更多信息,我可以推荐BurtKaliski的ALayman'sGuidetoASA.1,BERandDERSubsets。以上是C#学习教程:C#-如何计算特定哈希算法的ASN.1DER编码?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:

最新推荐
猜你喜欢