2

私は Fedora 14、MonoDevelop 2.4、Mono 2.6.7 を使用しています。したがって、自己署名証明書を生成しました:

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout mysitename.key -out mysitename.crt

次に、C# で暗号化と復号化を試しています。.crt ファイルを選択しています。問題は、X509Certificate2作成中の に秘密鍵がないことです! したがって、暗号化操作はうまくいき、爆弾を解読します。

私はおそらくopensslコマンドを間違って実行しています。それとも、X509Certificate2オブジェクトを作成する際の微妙な点ですか?

protected virtual void OnBtCertClicked (object sender, System.EventArgs e)
{
    try
    {
        if (myCert == null)
        {
            myCert = new X509Certificate2(fchCert.Filename);
        }

        RSACryptoServiceProvider pubKey = (RSACryptoServiceProvider)myCert.PublicKey.Key;
        byte[] myBlob = UTF8Encoding.Default.GetBytes(tbDisplay.Buffer.Text);
        byte[] myEncryptedBlob = pubKey.Encrypt(myBlob, false);
        tbDisplay.Buffer.Text = System.Convert.ToBase64String(myEncryptedBlob, Base64FormattingOptions.InsertLineBreaks);
    }
    catch (Exception excp)
    {
        tbDisplay.Buffer.Text = excp.GetType().ToString() + "\n\n" + excp.ToString();
    }
}

protected virtual void OnBtCertDecClicked (object sender, System.EventArgs e)
{
    try
    {
        if (myCert == null)
        {
            myCert = new X509Certificate2(fchCert.Filename);
        }

        if (!myCert.HasPrivateKey)
            throw new CryptographicException("Certificate has no private key");

        RSACryptoServiceProvider privKey = (RSACryptoServiceProvider)myCert.PrivateKey;
        byte[] myEncryptedBlob = System.Convert.FromBase64String(tbDisplay.Buffer.Text);
        byte[] myBlob = privKey.Decrypt(myEncryptedBlob, false);
        tbDisplay.Buffer.Text = UTF8Encoding.UTF8.GetString(myBlob);
    }
    catch (Exception excp)
    {
        tbDisplay.Buffer.Text = excp.GetType().ToString() + "\n\n" + excp.ToString();
    }
}
4

2 に答える 2

7

PKCS#12 証明書を作成します。

openssl pkcs12 -export -in yourcert.crt -inkey yourprivkey.key -out newcert.p12

秘密鍵が含まれているはずです。

于 2011-02-05T04:00:40.563 に答える
1

証明書には公開鍵のみが含まれます。使用する OpenSSL コマンドは、ファイルmysitename.keyにキーを作成します。キーファイルを個別にロードする必要があります。AFAIR生成された鍵ファイルには、いくつかのテキスト文字列( BEGIN/END RSA PRIVATE KEY )でカプセル化されたPKCS#8形式のbase64でエンコードされたRSA秘密鍵が含まれている必要があります。

于 2010-12-08T08:44:40.607 に答える