C# c“相当于”;java.security.spec.RSAPublicKeySpec“;及;java.security.PublicKey“;
我正在用c语言开发一个现有java应用程序的新版本 现有应用程序使用带有java.security.spec.*和boncycastle api的RSA加密 我正在为下面的java代码寻找c#中的等效代码:C# c“相当于”;java.security.spec.RSAPublicKeySpec“;及;java.security.PublicKey“;,c#,java,encryption,rsa,C#,Java,Encryption,Rsa,我正在用c语言开发一个现有java应用程序的新版本 现有应用程序使用带有java.security.spec.*和boncycastle api的RSA加密 我正在为下面的java代码寻找c#中的等效代码: public static java.security.PublicKey getKey ( org.bouncycastle.asn1.x509.RSAPublicKeyStructure rsaPublicKey ) { java.security.KeyFactory keyFac
public static java.security.PublicKey getKey
(
org.bouncycastle.asn1.x509.RSAPublicKeyStructure rsaPublicKey
)
{
java.security.KeyFactory keyFactory = KeyFactory.getInstance("RSA");
java.security.spec.RSAPublicKeySpec keySpec = new RSAPublicKeySpec(
rsaPublicKey.getModulus(),
rsaPublicKey.getPublicExponent());
java.security.PublicKey pkey = keyFactory.generatePublic(keySpec);
return pkey;
}
我“搜索”了很多,但没有找到解决办法
提前感谢您的帮助。尽管您可能已经意识到这一点,但有一个.NET版本的,因此您可以在C#项目中使用它 关于您的问题,下面是一个在pure Bouncy Castle中实现签名的示例,它处理MakeKey方法中的密钥生成,因此您可能想看看它 顺便说一下,如果此密钥位于证书中,您可能需要查看.NET X509Certificate2类 编辑 我试图将您的方法转换为c#等效方法,这一点与我得到的结果越接近:
public static byte[] getKey(Org.BouncyCastle.Asn1.x509.RSAPublicKeyStructure rsaPublicKey)
{
Org.BouncyCastle.Crypto.Parameters.RsaKeyParameters bcKeySpec = new RsaKeyParameters();
bcKeySpec.RsaKeyParameters(false, rsaPublicKey.getModulus(), rsaPublicKey.getPublicExponent());
RSAParameters keySpec = Org.BouncyCastle.Security.DotNetUtilities.ToRSAParameters(bcKeySpec);
RSACryptoServiceProvider keyFactory = new RSACryptoServiceProvider();
keyFactory.ImportParameters(keySpec);
byte[] pKey = keyFactory.ExportCspBlob(false);
return pKey;
}
请注意,密钥被导出到字节数组中,这取决于您以后要对密钥执行的操作,可能对您有帮助,也可能对您没有帮助。此外,RSACryptServiceProvider对象允许您加密、解密、签名和验证,因此,如果您要获取用于上述任何目的的密钥,然后,您可能希望返回keyFactory对象,而不是导出的公钥
如果您想了解有关RSACryptServiceProvider的更多信息,可以在此处阅读:尽管您可能已经意识到这一点,但有一个.NET版本的,因此您可以在C#项目中使用它 关于您的问题,下面是一个在pure Bouncy Castle中实现签名的示例,它处理MakeKey方法中的密钥生成,因此您可能想看看它 顺便说一下,如果此密钥位于证书中,您可能需要查看.NET X509Certificate2类 编辑 我试图将您的方法转换为c#等效方法,这一点与我得到的结果越接近:
public static byte[] getKey(Org.BouncyCastle.Asn1.x509.RSAPublicKeyStructure rsaPublicKey)
{
Org.BouncyCastle.Crypto.Parameters.RsaKeyParameters bcKeySpec = new RsaKeyParameters();
bcKeySpec.RsaKeyParameters(false, rsaPublicKey.getModulus(), rsaPublicKey.getPublicExponent());
RSAParameters keySpec = Org.BouncyCastle.Security.DotNetUtilities.ToRSAParameters(bcKeySpec);
RSACryptoServiceProvider keyFactory = new RSACryptoServiceProvider();
keyFactory.ImportParameters(keySpec);
byte[] pKey = keyFactory.ExportCspBlob(false);
return pKey;
}
请注意,密钥被导出到字节数组中,这取决于您以后要对密钥执行的操作,可能对您有帮助,也可能对您没有帮助。此外,RSACryptServiceProvider对象允许您加密、解密、签名和验证,因此,如果您要获取用于上述任何目的的密钥,然后,您可能希望返回keyFactory对象,而不是导出的公钥
如果您想了解有关RSACryptServiceProvider的更多信息,请阅读此处:你好,Rafael,谢谢您的回答。我也在用Boncycastle。我的问题是:类java.security.KeyFactory和java.security.spec.RSAPublicKeySpec在C#api(或bouncycastle)中是否存在等价性?PS:新的C#版本必须支持旧java版本生成的密钥。先谢谢你。或者简单地说,如何从C#中给定的模和指数创建RSA公钥?可能吗?谢谢你的帮助!你好,拉斐尔,谢谢你的回答。我也在用Boncycastle。我的问题是:类java.security.KeyFactory和java.security.spec.RSAPublicKeySpec在C#api(或bouncycastle)中是否存在等价性?PS:新的C#版本必须支持旧java版本生成的密钥。先谢谢你。或者简单地说,如何从C#中给定的模和指数创建RSA公钥?可能吗?谢谢你的帮助!欢迎来到SO!这里不鼓励只使用代码的答案,因为它们无法提供问题是如何解决的。请更新您的答案,解释您的代码如何解决OP的问题:)欢迎使用SO!这里不鼓励只使用代码的答案,因为它们无法提供问题是如何解决的。请更新您的答案,解释您的代码如何解决OP的问题:)