1

这是 C# 语言的问题。

我在一个 A 类(称为 sslCert)中引用了 X509 证书,即我可以访问与 X509 证书关联的各种成员。

另外,我有一个 B 类,具有以下 2 个加密密钥成员 --> KeyInfo publicKey;KeyInfo 私钥;

问题是我无法找到使用 X509 中的公钥和私钥值设置这两个值(公钥和私钥)的方法。直接分配不起作用并抱怨数据类型不匹配。

B.publicKey = A.sslcertificate.Certificate.PublicKey;
B.privateKey = A.sslcertificate.Certificate.PrivateKey;

我已经尝试了很多,但不知道实现这一目标的确切分配方式是什么。任何人都可以对此有所了解吗?

谢谢 !!!

4

2 回答 2

0

这是你想做的吗?不好意思,还在想办法。

    using System.Net;
    using System.Security.Cryptography.Xml;
    using System.Security.Cryptography.X509Certificates;

    namespace ConsoleApplication1
    {
        public class A
        {
            private string website = "https://www.chase.com/";
            private X509Certificate m_certificate;

            public X509Certificate Certificate
            {
                get
                {
                    if (m_certificate == null)
                    {
                        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(website);
                        HttpWebResponse response = (HttpWebResponse) request.GetResponse();
                        response.Close();
                        X509Certificate cert = request.ServicePoint.Certificate;
                        m_certificate = cert;
                    }
                    return m_certificate;
                }
            }
            public X509Certificate2 Certificate2
            {
                get
                {
                    return new X509Certificate2(Certificate);
                }
            }
        }

        public class B
        {
            public KeyInfo publicKey { get; set; }
            public KeyInfo privateKey { get; set; }
        }

        class Program
        {
            private static void Main(string[] args)
            {
                A tempA = new A();
                B tempB = new B();

                tempB.privateKey = tempA.Certificate.GetPublicKey(); // fails
            }
        }
    }
于 2012-12-31T22:16:42.063 回答
0

假设你有证书:

X509Certificate2 certificate;

你刚才

KeyInfo ki = new KeyInfo();
KeyInfoX509Data keyInfoData = new KeyInfoX509Data( certificate );
ki.AddClause( keyInfoData );

这会将整个证书存储在密钥信息中。私有部分和公共部分都可以分开存储,您只需使用其他类型的子句初始化 KeyInfo。支持的子句的完整列表:

http://msdn.microsoft.com/en-us/library/system.security.cryptography.xml.keyinfoclause.aspx

于 2012-12-31T22:39:36.703 回答