2012-07-26 365 views
-2

我必须解密使用.NET中的RSA xml签名公钥加密的字符串 我尝试使用引发错误的php RSA加密模块。因此,我想要使用Java。我是一个新的Java。示例代码将非常有用。Java:使用RSA私钥(Xml签名)解密字符串

其实我需要移植此以下.NET代码到Java

RSACryptoServiceProvider rsaCryptoServiceProvider = new RSACryptoServiceProvider(keySize); 
rsaCryptoServiceProvider.FromXmlString(privateKey); 
int base64BlockSize = ((keySize/8) % 3 != 0) ? (((keySize/8)/3) * 4) + 4 : ((keySize/8)/3) * 4; 
int iterations = inputString.Length/base64BlockSize; 
ArrayList arrayList = new ArrayList(); 
for (int i = 0; i < iterations; i++) 
{                    
    byte[] encryptedBytes = Convert.FromBase64String(inputString.Substring(base64BlockSize * i, base64BlockSize)); 
    Array.Reverse(encryptedBytes); 
    arrayList.AddRange(rsaCryptoServiceProvider.Decrypt(encryptedBytes, false)); 
}                         lstrResponse = Encoding.UTF8.GetString(arrayList.ToArray(Type.GetType("System.Byte")) as byte[]); 

回答

1

你必须阅读.NET XML键表示和指数和模量储存在一个Java RSAPrivateKeySpec。将此实例传递给KeyFactorygeneratePrivate方法以生成密钥。

然后,您需要一个Cipher实例,该实例通过Cipher.getInstance方法获得,其算术运算符合.Net实现。密码也需要正确初始化。使用获得的RSAPrivateKey实例(请参阅上文),然后可以调用其中一种密码方法来解密数据。

魔鬼在细节,当然:解码和关键材料的格式,寻找合适的算法,初始化...

+0

你的意思'Cipher.getInstance()'? – 2012-07-27 00:34:03

+0

谢谢,纠正它 – Arne 2012-07-27 04:16:14