繁体   English   中英

在 C# 中加载 ASN.1/DER 编码的 RSA 密钥对

[英]Load ASN.1/DER encoded RSA keypair in C#

我在 Crypto++ 中创建了 DER 编码的 RSA 密钥对,以及密码。 它们是 Base64Encoded 字符串。 我首先将 Base64 中的数据解码为字节数组,但我不确定如何将它们加载到RSACryptoServiceProvider

static void Main()
{
    string pbkeystr = "mypublickey";
    string pvkeystr = "myprivatekey";
    string cipherstr = "mycipher";

    byte[] pbkey = Convert.FromBase64String(pbkeystr);
    byte[] pvkey = Convert.FromBase64String(pvkeystr);
    byte[] cipher = Convert.FromBase64String(cipherstr);

    RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();

    //Set keys here..

    //Decrypt the cipher using private key
    rsa.Decrypt(pvkey, false);
}

没有设置键的功能。 我发现的ImportParameters方法是ImportParameters方法,它采用RSAParameters类,该类由pqn 、模数、指数等组成。我无法访问这些。

有什么办法可以将密钥加载为字符串吗? 如何将密钥加载到RSACryptoServiceProvider

有什么办法可以将密钥加载为字符串吗? 如何将密钥加载到 RSACryptoServiceProvider 中?

从您的其他 Crypto++ 问题How to load Base64 RSA keys in Crypto++来看,您似乎只有公钥和私钥,因为您使用了DEREncodeBERDecode 也就是说,您有 RSA 参数,而不是主题公钥信息和私钥信息。 您的密钥缺少 OID 标识符和版本号。 事情就这样就好了。

Cryptographic Interoperability: Keys on the Code Project 中,您将需要一个 C# 类,用于在 Base64 解码后解析 ASN.1/DER。 CodeProject 文章提供了一个名为AsnKeyParser的 C# 类来读取 ASN.1/DER 并返回一个RSAParameters以加载到 CSP。

AsnKeyParser类的代码大约有 800 行,还有其他五个支持文件来完成这一切,所以把它放在这里并不合适。 你应该自己下载。 感兴趣的文件称为CSInteropKeys.zip

一旦你连接了AsnKeyParser类,它就会像下面的 RSA 公钥一样简单。 私钥将类似,代码在 CodeProject 站点上提供。

// Your ASN.1/DER parser class
AsnKeyParser keyParser = new AsnKeyParser("rsa-public.der");
RSAParameters publicKey = keyParser.ParseRSAPublicKey();

// .Net class
CspParameters csp = new CspParameters;
csp.KeyContainerName = "RSA Test (OK to Delete)";    
csp.ProviderType = PROV_RSA_FULL;    // 1
csp.KeyNumber = AT_KEYEXCHANGE;      // 1

// .Net class
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(csp);
rsa.PersistKeyInCsp = false;
rsa.ImportParameters(publicKey);

链接到另一个站点上的文件是不受欢迎的,但我不知道如何提供其他信息。 涉及的源代码太多,无法放在答案中。


为了完整起见,.NET使互操作容易。 他们不接受 ASN.1/DER 或 PEM。 相反,.Net 接受一些键的 XML 表示。 我相信您可以在RFC 3275, XML-Signature Syntax and Processing 中找到它。 Microsoft 不会为您说明这一点 当我写代码项目文章时,我把它拼凑在一起。

也许我们应该在 Crypto++ 中添加一个类来反刍 XML 除了 ASN.1/DER 和 PEM。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM