C# .NET中的RSA加密-JAVA中的解密->;Java抛出;“模数不为正”;错误

C# .NET中的RSA加密-JAVA中的解密->;Java抛出;“模数不为正”;错误,c#,java,.net,rsa,encryption-asymmetric,C#,Java,.net,Rsa,Encryption Asymmetric,我与我们的第三方供应商在实施sso时遇到问题。他们在验证我的签名时收到以下错误: public string MD5withRSASignature(string encryptedStringToSign) { byte[] signature; using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(1024)) { XmlDocum

我与我们的第三方供应商在实施sso时遇到问题。他们在验证我的签名时收到以下错误:

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);
    }
java.lang.arithmetricException:biginger:module非正——位于java.math.biginger.modPow(biginger.java:1556)

我无法控制他们的Java代码。以下是我现在正在做的事情:

我使用以下代码在C#中创建了一个密钥对:

        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);
    }
(是的,我知道私钥应该在密钥存储中)

下面是他们用来转换xml键的代码(这是Java)


例外情况与Java使用的RSA公钥有关。您的任何代码都不能解决这一点。Java端是如何获得该密钥的,使用的是什么格式


可以解释该错误的一个常见错误是,如果模数转换为字节数组,但前导零字节在需要时不存在。基本上,它的使用比第一次出现时要复杂一些。它是为与DER编码的ASN.1整数兼容而设计的。结果是,如果模的第一个字节
b
设置了高位,即
128,那么您可以发布所有Java异常堆栈吗?不幸的是,我不能。他们拒绝提供。这似乎来自标准的JavaRSA类,我请求并获得了它们的XML密钥转换代码。请参见上文,我以xml格式生成密钥并将其发送过来。我得到了他们的代码,该代码采用xml格式的密钥并进行转换。这里的问题是BigInteger构造函数吗?如何在xml密钥中将0字节前置为模数?(上面的代码)证明我没有使用正确的密钥格式(PKCS#8),只是使用了.NET吐出的任何内容。谢谢你,你给我指明了正确的方向。