我遇到問題,我們的第三方供應商暗示sso。.NET中的RSA加密 - JAVA中的解密 - > Java引發「模塊不正常」錯誤
java.lang.ArithmeticException:BigInteger的:驗證我的簽名時,他們收到以下錯誤模量並不積極 - 在java.math.BigInteger.modPow(BigInteger.java:1556)
我沒有控制他們的Java代碼。以下是我現在做:
CspParameters csp = new CspParameters();
csp.KeyNumber = (int)KeyNumber.Signature;
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(1024, csp))
{
File.AppendAllText(path + "PrivateKey.xml", rsa.ToXmlString(true));
File.AppendAllText(path + "PublicKey.xml", rsa.ToXmlString(false));
}
下面是簽名的代碼:
public string MD5withRSASignature(string encryptedStringToSign)
{
byte[] signature;
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(1024))
{
XmlDocument xDoc = new XmlDocument();
xDoc.Load(PRIVATE_KEY_PATH);
rsa.FromXmlString(xDoc.OuterXml);
byte[] bytes = Encoding.UTF8.GetBytes(encryptedStringToSign);
signature = rsa.SignData(bytes, new MD5CryptoServiceProvider());
}
return Convert.ToBase64String(signature);
}
(是的,我知道
我使用此代碼創建一個密鑰對,在C#私鑰應位於密鑰存儲區中)。
這裏是他們使用的XML轉換鍵代碼(這就是Java)
private static RSAPublicKey ReadXMLKey(String fileName)
{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(new File(fileName));
byte[] modBytes = GetBytesFromElement(document, "Modulus");
byte[] expBytes = GetBytesFromElement(document, "Exponent");
RSAPublicKeySpec rsaKeyspec = new RSAPublicKeySpec(new BigInteger(modBytes), new BigInteger(expBytes));
RSAPublicKey key = (RSAPublicKey)KeyFactory.getInstance("RSA").generatePublic(rsaKeyspec);
return key;
}
private static byte[] GetBytesFromElement(Document doc, String tag) throws IOException
{
BASE64Decoder decoder = new BASE64Decoder();
NodeList list = doc.getElementsByTagName(tag);
byte[] results = null;
if (list.getLength() == 1)
{
Element item = (Element)list.item(0);
Text text = (Text)item.getFirstChild();
results = decoder.decodeBuffer(text.getNodeValue().trim());
}
return results;
}
你能發佈所有的Java異常堆棧嗎? – andrewmu 2010-10-19 16:58:06
不幸的是我不能。他們拒絕提供。這顯然是來自標準的Java RSA類。 – 2010-10-19 18:27:47
我懇求並掌握了他們的XML密鑰轉換代碼。見上面 – 2010-10-20 13:52:22