7

X.509 証明書を使用してメッセージを復号化するのに問題があります。

次のオプションを指定して、makecert で証明書を生成します。

makecert -r -pe -n "CN=MyCertificate" -ss CA -sr CurrentUser -a sha1 -sky signature -cy authority -sv CA.pvk CA.cer

PrivateKey は「mypassword」でした。

私の問題は、C# で以前の証明書を使用して暗号化されたメッセージを復号化したい場合です。

このクラスhttp://blog.shutupandcode.net/?p=660を見つけましたが、X509Decryptメソッドでは常に PrivateKey が null です。

public static byte[] X509Decrypt(byte[] data, string certificateFile, string password)
{
    // 証明書をロードし、指定されたデータを復号化します
    使用 (var ss = new System.Security.SecureString())
    {
        foreach (password.ToCharArray() の var keyChar)
            ss.AppendChar(keyChar);

        // パスワードで保護された証明書ファイルをロードします
        X509Certificate2 cert = 新しい X509Certificate2(certificateFile, ss);

        使用 (RSACryptoServiceProvider rsa = (RSACryptoServiceProvider)cert.PrivateKey)
        {
            return rsa.Decrypt(データ、真);
        }    
    }
}

証明書ファイル(.cer)を渡してみた

X509DecryptString(token, @"c:\CA.cer", "mypassword");

pvk ファイル (.pvk) を渡す

X509DecryptString(token, @"c:\CA.pvk", "mypassword");

ただし、常に PrivateKey プロパティが null であることを確認してください。

pvk ファイルを使用してメッセージを復号化する方法を教えてもらえますか?

ありがとう、

ホセ

4

2 に答える 2

12

証明書自体には公開鍵 (+ 一部のデータ) のみが含まれ、秘密鍵は含まれません。(RSA 秘密鍵が「mypassword」である可能性はほとんどありません。秘密鍵を保護するパスワードは「mypassword」である可能性がありますが、秘密鍵自体 (より具体的には RSA の秘密指数) はかなり長い数字になります。)

結果として (CA.cer証明書しか含まれていないため)、X509DecryptString(token, @"c:\CA.cer", "mypassword")ほぼ確実に機能しません。

X509DecryptString(token, @"c:\CA.pvk", "mypassword");原則として機能する可能性がありますが、それからX509Certificate2オブジェクトを作成しているため、証明書と秘密鍵が必要です。PKCS#12 コンテナ (.p12/.pfx) からロードできるはずです。

このコンテナーを作成するには、次を使用できますpvk2pfx

pvk2pfx -spc CA.cer -pvk CA.pvk -pfx CA.pfx

( を指定しない-pfx CA.pfxと、対話型インターフェイスが起動します。この場合、ボックスにチェックを入れて秘密鍵をエクスポートする必要があります。)

次に、代わりにその pfx/p12 ファイルを使用して復号化を試みます。

于 2010-11-04T14:45:12.070 に答える
0

公開鍵と秘密鍵のペアを生成するには、「-sky exchange」を使用する必要があると思います。

于 2010-11-04T18:49:13.863 に答える