我有X509Certificate2
属性,如果设置的值为空,我想检查set部分。
当我尝试访问任何X509Certificate2
属性(如publickey)时,我遇到了以下异常:
System.Security.Cryptography.CryptographicException
发生了mscorlib.dll
。
当然,我可以写一些这样的例子:
private static X509Certificate2 _certificate;
public X509Certificate2 Certificate
{
get
{
return _certificate;
}
set
{
try
{
if (value.PublicKey != null)
_certificate = value;
}
catch(CryptographicException)
{
_certificate = null;
}
}
}
但我想要一个更好的方式,有没有人有想法?
答案 0 :(得分:0)
MSDN说“密钥值不是RSA或DSA密钥,或密钥不可读”。所以也许你的算法不是RSA或DSA。检查返回GetKeyAlgorithm()
的内容答案 1 :(得分:0)
您可以使用简单选项 - 访问Handle属性:
public X509Certificate2 Cretificate
{
get { return _certificate; }
set { _certificate = value.Handle == IntPtr.Zero ? null : value}
}
据我所知,否则当你定义:
X509Certificate2 cert = new X509Certificate2();
并尝试使用空证书设置证书 - 您可能会遇到异常。
答案 2 :(得分:-1)
您可以使用null coalescing operator:
public X509Certificate2 Certificate
{
get { return _certificate; }
set { _certificate = value.PublicKey ?? null; }
}
基本上:
_certificate = value.PublicKey它不是null,否则它等于null。
但现在写这篇文章,我觉得这样做不行,所以可能需要使用ternary:
public X509Certificate2 Certificate
{
get { return _certificate; }
set { _certificate = value == null ? null : value.PublicKey; }
}
这意味着:
_certificates = null如果value为null,则它等于value.PublicKey
我认为这是正确的方法,因为您的值为null将导致异常。