Tag: asn.1

WinRT中是否有SignedCMS的替代品?

在将.NET桌面应用程序移植到Windowsapp store应用程序时,我再次陷入困境……简而言之,我有一个ZIP文件,其中包含加密和签名的XML文件以及证书。 解密工作(或多或少),但现在我必须“取消签名”XML并且我被卡住了。 在.NET App中,使用System.Security.Cryptography.Pkcs.SignedCms完成取消签名,但WinRt中不存在该类(一如既往……) WinRT还有其他选择吗? 这是.NET App中使用的一些代码: public static byte[] CheckAndRemoveSignature(byte[] data, X509Certificate2Collection certStore, out SignedCms out_signature) { SignedCms signedMessage = new SignedCms(); signedMessage.Decode(data); if ((certStore != null) && (certStore.Count > 0)) signedMessage.CheckSignature(certStore, true); else signedMessage.CheckSignature(true); out_signature = signedMessage; // return data without signature return signedMessage.ContentInfo.Content; } 我已经搜索了很多,但我发现的唯一可以帮助我的是这篇文章。 不幸的是,标记的答案没有提供任何有用的信息:( Windows 8 Metro加密 – 使用SignedCms […]

将ASN.1数据转换为公钥需要什么? 例如,我如何确定OID?

此代码与反垃圾邮件工作中使用的DKIM签名validation有关 。 我有来自s1024._domainkey.yahoo.com的byte[] ,它是ASN.1编码的,但我不知道是否仅包含足够的信息来实现公钥。 基于此类 ,我似乎可以将ASN.1密钥转换为X509Certificate公钥,但我需要提供OID和一些ASN.1编码的参数。 在这个例子中,我有ASN1密钥的元数据: RSA编码密钥(根据RFC3447,ASN.1 DER编码[ITU-X660-1997] RSAPublicKey) 与sha1 sha256哈希算法一起使用 使用与RFC3447的A.2节中的下表相关的OID(虽然我不知道如何将此信息转换为完整的OID) /* * 1.2.840.113549.1 * MD2 md2WithRSAEncryption ::= {pkcs-1 2} MD5 md5WithRSAEncryption ::= {pkcs-1 4} SHA-1 sha1WithRSAEncryption ::= {pkcs-1 5} SHA-256 sha256WithRSAEncryption ::= {pkcs-1 11} SHA-384 sha384WithRSAEncryption ::= {pkcs-1 12} SHA-512 sha512WithRSAEncryption ::= {pkcs-1 13} */ 代码示例 string pubkey = “MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDrEee0Ri4Juz+QfiWYui/E9UGSXau/2P8LjnTD8V4Unn+2FAZVGE3kL23bzeoULYv4PeleB3gfmJiDJOKU3Ns5L4KJAUUHjFwDebt0NP+sBK0VKeTATL2Yr/S3bT/xhy+1xtj4RkdV7fVxTn56Lb4udUnwuxK4V5b5PdOKj/+XcwIDAQAB”; byte[] pubkeyByteArray […]

从公钥正确创建RSACryptoServiceProvider

我目前正在尝试仅从解码的PEM文件创建RSACryptoServiceProvider对象。 经过几天的搜索,我确实设法解决了一个有效的解决方案,但它不是一个可以生产就绪的解决方案。 简而言之,为了从组成PEM文件中的公钥的字节创建RSACryptoServiceProvider对象,我必须创建指定keysize的对象(当前使用SHA256的2048),然后使用Exponent导入RSAParameters对象和Modulus集。 我是这样做的; byte[] publicKeyBytes = Convert.FromBase64String(deserializedPublicKey.Replace(“—–BEGIN PUBLIC KEY—–“, “”) .Replace(“—–END PUBLIC KEY—–“, “”)); // extract the modulus and exponent based on the key data byte[] exponentData = new byte[3]; byte[] modulusData = new byte[256]; Array.Copy(publicKeyBytes, publicKeyBytes.Length – exponentData.Length, exponentData, 0, exponentData.Length); Array.Copy(publicKeyBytes, 9, modulusData, 0, modulusData.Length); // import the public key data (base […]