在C#中查找类似于X509EncodedKeySpec的文件

时间:2017-12-25 13:00:30

标签: java c# cryptography

我只需要在C#中获取这些代码,实际上我无法在C#中找到X509EncodedKeySpec

byte[] keyByte = Base64.decode(publicKey);

// generate public key
X509EncodedKeySpec s = new X509EncodedKeySpec(keyByte);
KeyFactory factory = null;

try 
{
    factory = KeyFactory.getInstance("RSA");
} 
catch (NoSuchAlgorithmException e) 
{
    // TODO Auto-generated catch block
    e.printStackTrace();
}

Key pubKey = null;
try 
{
    pubKey = factory.generatePublic(s);
} 
catch (InvalidKeySpecException e) 
{
    // TODO Auto-generated catch block
    e.printStackTrace();
}

2 个答案:

答案 0 :(得分:1)

从 .NET Core 3.0 开始 ImportSubjectPublicKeyInfo 可用

https://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.rsa.importsubjectpublickeyinfo?view=netcore-3.0

您应该可以按如下方式使用它:

using (RSA rsa = RSA.Create())
{
     rsa.ImportSubjectPublicKeyInfo(publicKey, out _);
     //do your stuff 
}

答案 1 :(得分:0)

X509EncodedKeySpec是Java的X.509 SubjectPublicKeyInfo版本。 .NET没有内置任何用于读取SubjectPublicKeyInfo的API。为获得最佳效果,您希望拥有完整的证书,然后使用cert.GetRSAPublicKey()

如果您可以将RSA模数和RSA(公共)指数值传输,那么您可以构建RSAParameters对象以加载到密钥中。

using (RSA rsa = RSA.Create())
{
    rsa.ImportParameters(new RSAParameters { Modulus = modulus, Exponent = exponent });
    // do public key things
}