5

次のパラメーターを指定してmakecertを使用してx509証明書を作成しています。

makecert -r -pe -n "CN = Client" -ss MyApp

この証明書を使用して、RSAアルゴリズムを使用してデータを暗号化および復号化します。Windows証明書ストアで生成された証明書を調べたところ、すべて問題ないようです(秘密鍵があり、公開鍵は1024ビットのRSA鍵などです)。

今、私はこのC#コードを使用してデータを暗号化します:

X509Store store = new X509Store("MyApp", StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
X509Certificate2Collection certs = store.Certificates.Find(X509FindType.FindBySubjectName, "Client", false);
X509Certificate2 _x509 = certs[0];

using (RSACryptoServiceProvider rsa = (RSACryptoServiceProvider)_x509.PublicKey.Key)
{
    byte[] dataToEncrypt = Encoding.UTF8.GetBytes("hello");
    _encryptedData = rsa.Encrypt(dataToEncrypt, true);
}

Encryptメソッドを実行すると、「Badkey」というメッセージとともにCryptographicExceptionが発生します。

コードは大丈夫だと思います。おそらく、証明書を正しく作成していません。コメントはありますか?ありがとう

----------------編集--------------
OpenSslを使用して証明書を作成する方法を知っている人がいれば、それも私にとって有効な答えです。

4

2 に答える 2

4

キーを暗号化に使用できるようにするには、-sky-optionを使用する必要があります。デフォルトでは、「makecert」はAT_SIGNATUREキー仕様を使用しますが、これは暗号化/復号化では機能しません。代わりに、次のコマンドを発行してAT_KEYEXCHANGE仕様を使用するようにします。

makecert -r -pe -n "CN=Client" -ss MyApp -sky Exchange

(前のキーを削除するか、別のコンテナー名を使用することを忘れないでください)。

于 2010-06-10T08:14:41.247 に答える
1

これは、c#を使用してx509証明書とrsaでmakcertの使用例を見つけようとしたときに偶然見つけた別のページでしたが、残念ながら、ソリューションの一部しか提供していませんでした。私は人々が興味を持っているかもしれないブログエントリにすべてのビットをまとめました、そしてそれはここで見つけることができます:http: //nick-howard.blogspot.com/2011/05/makecert-x509-certificates-and-rsa。 html

于 2011-05-16T23:37:37.043 に答える