2013-04-15 99 views
0

我正在開發一個現有java應用程序的c#中的新版本。c#相當於「java.security.spec.RSAPublicKeySpec」和「java.security.PublicKey」

現有應用程序對java.security.spec。*和boncycastle api使用RSA加密。

我在C#尋找等同的代碼,下面的代碼在Java:

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; 
} 

我「google搜索」了很多,但沒有找到解決辦法。

在此先感謝您的幫助。

回答

1

雖然您可能已經意識到這一點,但有一個.NET版本的Bouncy Castle,因此您可以在您的C#項目中使用它。

關於你的問題,here是一個在純Bouncy城​​堡中實現簽名的例子,它處理MakeKey方法中的密鑰生成,所以你可能想看看它。

順便說一句,如果這個密鑰在證書中,你可能想看看.NET X509Certificate2類。

編輯

我想你的方法能轉換成交流#等價的,這一點,我得到了接近:

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; 
} 

注意,關鍵是導出到一個字節數組,這取決於以後你想用你的密鑰做什麼,可能會對你有所幫助,同樣,RSACryptoServiceProvider對象可以讓你加密,解密,簽名和驗證,所以如果你打算爲這些目的獲取密鑰,那麼你可能想要返回keyFactory對象而不是導出的公鑰。

如果您想了解的RSACryptoServiceProvider你可以點擊這裏瞭解更多信息:http://msdn.microsoft.com/en-us/library/s575f7e2.aspx

+0

拉斐爾您好,謝謝您的回答。我也在使用Boncycastle。我的問題意味着:是否存在C#api(或bouncycastle)等價類:java.security.KeyFactory和java.security.spec.RSAPublicKeySpec? PS:新的C#版本必須支持使用舊的Java版本生成的密鑰。提前謝謝你。 –

+0

或者只是如何創建一個RSA公鑰從給定的模數和指數在C#?可能嗎 ?謝謝你的幫助! –

+0

當我嘗試導入密鑰時,它顯示錯誤的數據。 – Sml004