問題描述
我在 Crypto++ 中創建了 DER 編碼的 RSA 密鑰對以及密碼.它們是 Base64Encoded 字符串.我首先將數據從 Base64 解碼為字節數組,但我不確定如何將它們加載到 RSACryptoServiceProvider
.
I have DER encoded RSA keypair created in Crypto++, as well as cipher. They are Base64Encoded string. I first decode the data from Base64 to byte array, but I am not sure how to load them into 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
方法,它采用 RSAParameters
類,該類由 p
、q
、n
、模數、指數等.我無權訪問這些.
There are no functions to set keys. The only thing I found was ImportParameters
method, which takes RSAParameters
class which consists of p
, q
, n
, modulus, exponent etc. I don't have access to these.
有什么方法可以將鍵加載為字符串?如何將密鑰加載到 RSACryptoServiceProvider
?
Is there any way I can load the keys as string? How can I load the key into RSACryptoServiceProvider
?
推薦答案
有什么方法可以將鍵加載為字符串?如何將密鑰加載到 RSACryptoServiceProvider 中?
Is there any way I can load the keys as string? How can I load the key into RSACryptoServiceProvider?
從您的其他 Crypto++ 問題,如何在 Crypto++ 中加載 Base64 RSA 密鑰,您似乎有 僅 公鑰和私鑰,因為您使用了 DEREncode
和 BERDecode
.也就是說,您有 RSA 參數,而不是主題公鑰信息和私鑰信息.您的密鑰缺少 OID 標識符和版本號.那樣就好了.
From your other Crypto++ question, How to load Base64 RSA keys in Crypto++, it looks like you have only the public and private keys because you used DEREncode
and BERDecode
. That is, you have the RSA parameters, and not the subject public key info and the private key info. Your keys lack the OID identifiers and version numbers. Things are fine that way.
從代碼項目上的 加密互操作性:密鑰,您在 Base64 解碼后將需要一個解析 ASN.1/DER 的 C# 類.CodeProject 文章提供了一個名為 AsnKeyParser
的 C# 類來讀取 ASN.1/DER 并返回一個 RSAParameters
以加載到 CSP 中.
From Cryptographic Interoperability: Keys on the Code Project, you will need a C# class that parses the ASN.1/DER after you Base64 decode it. The CodeProject article provides a C# class called AsnKeyParser
to read the ASN.1/DER and returns a RSAParameters
to load into a CSP.
AsnKeyParser
類的代碼大約有 800 行,另外還有 5 個支持文件來完成這一切,所以放在這里不太合適.你應該自己下載.感興趣的文件稱為 CSInteropKeys.zip
.
The code for the AsnKeyParser
class is about 800 lines, and there are five other supporting files to make it all happen, so its not really appropriate to place it here. You should download it yourself. The file of interest is called CSInteropKeys.zip
.
一旦您連接到 AsnKeyParser
類,就如同下面的 RSA 公鑰一樣簡單.私鑰類似,代碼在 CodeProject 網站上給出.
Once you wire-in the AsnKeyParser
class, it will be as simple as the following for a RSA Public key. The private key will be similar, and the code is given on the CodeProject site.
// 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);
不贊成鏈接到另一個站點上的文件,但我不知道如何提供其他信息.答案中涉及的源代碼太多.
Linking to files on another site is frowned upon, but I don't know how to provide the information otherwise. There's too much source code involved to place in an answer.
為了完整性,.Net 不使互操作變得容易.他們不接受 ASN.1/DER 或 PEM.相反,.Net 接受一些 XML 表示的鍵.我相信您可以在 RFC 3275, XML-Signature Syntax and Processing 中找到它.Microsoft 沒有為您聲明.我在寫代碼項目文章時將其拼湊起來.
For completeness, .Net does not make interop easy. They do not accept ASN.1/DER or PEM. Rather, .Net accepts some XML representation of the keys. I believe you can find it in RFC 3275, XML-Signature Syntax and Processing. Microsoft does not state that for you. I kind of pieced it together when I wrote the Code Project article.
除了 ASN.1/DER 和 PEM 之外,也許我們應該在 Crypto++ 中添加一個類來反芻 XML.
Maybe we should add a class to Crypto++ to regurgitate XML in addition to ASN.1/DER and PEM.
這篇關于在 C# 中加載 ASN.1/DER 編碼的 RSA 密鑰對的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!