java生成的 RSA公钥格式:
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCZoqP0Ce
TVWB6lL7bdX4iilWEbr03hmgvoBTYO5rzTJEboVcdPwYMT6/qp
jLFfDCu3qytxf+WuRqJVCsw11m4EqypTeyKy3PhkybUG/IoCYE
FwQlq24kIyXQiWUdTJT6FhLDKSfEUqUHpENbXmDZBXM
+Hf4hsEDUKV2kkhRJsnwwIDAQAB
而net 的公钥是xml格式:
<RSAKeyValue><Modulus>vpUk3hmR9kDdo8+AoLfFqpP/JlPkU6VDlMaDq
F5WoNUQcdUsfUT4cQSZaa5O/aeDP2llvPL0paQmlXn1bV2A0dJKTnvlWNQC
/QGFlcVIfSWeDaZnZDn/Z1XEqwBKMnZtCIQZQPws7kqlouV9CmjcA2i8Fm9
S0fDl7F6CfJfJlsM=</Modulus><Exponent>AQAB</Exponent>
</RSAKeyValue>.net怎么调用java生成的RSA
  公钥进行加密?
求助 !!

解决方案 »

  1.   

    .NET无法调用JAVA产生的RSA公钥,必须将RSA算法在.NET里面重写才行,在.NET里面RSA的公钥长度是128位的,但是你给出的JAVA公钥却是159位长度,非常的不标准,公钥长度不满足128的肯定无法给.NET使用。我这里最多帮你做个对应解析,数据是肯定无法用的:
    将java的RSA公钥最后四个字母AQAB分割开,用.NET的xml格式表示就是
    <RSAKeyValue><Modulus>MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCZoqP0Ce
    TVWB6lL7bdX4iilWEbr03hmgvoBTYO5rzTJEboVcdPwYMT6/qp
    jLFfDCu3qytxf+WuRqJVCsw11m4EqypTeyKy3PhkybUG/IoCYE
    FwQlq24kIyXQiWUdTJT6FhLDKSfEUqUHpENbXmDZBXM
    +Hf4hsEDUKV2kkhRJsnwwID</Modulus><Exponent>AQAB</Exponent>
    </RSAKeyValue>
    这里的数据都是用的BASE64编码,你用BASE64解码后可以得到byte[],就可以看到密钥长度了,实际密钥要转换为BigInteger后才能参与RSA核心运算。
      

  2.   

    刚才试了下,.NET产生的密钥长度虽然是128位的,但能识别其它长度的密钥,之后就是调用方法加密了,示例代码如下,具体结果请自行验证是否正确(必须去掉public字符串里面的换行符,我这里因为字符串过长,CSDN不让我贴出来,所以才没去换行符):
                string pubkey = "<RSAKeyValue><Modulus>MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCZoqP0Ce
    TVWB6lL7bdX4iilWEbr03hmgvoBTYO5rzTJEboVcdPwYMT6/qp
    jLFfDCu3qytxf+WuRqJVCsw11m4EqypTeyKy3PhkybUG/IoCYE
    FwQlq24kIyXQiWUdTJT6FhLDKSfEUqUHpENbXmDZBXM
    +Hf4hsEDUKV2kkhRJsnwwID</Modulus><Exponent>AQAB</Exponent>
    </RSAKeyValue>";
                string s = "测试测试";
                using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
                {
                    rsa.FromXmlString(pubkey);
                    rsa.FromXmlString(pubkey);
                    byte[] bytes = Encoding.Default.GetBytes(s);
                    var tmp = rsa.Encrypt(bytes, false);
                    var encryptstring = Convert.ToBase64String(tmp);
                }
      

  3.   

    用.net 自动生成滴公钥和私钥
    有方法的 自动生成
    你还是看看 这里吧
    http://blog.csdn.net/caitianzhen2/article/details/7210858
      

  4.   

    做一个转换工具类吧,把java和net的密钥做互相转化
      

  5.   

    这是两个不同的编码格式转换,公钥的编码格式有ASN.1标准,也有CryptoAPI标准,
    ASN.1标准有SubjectPublicKeyInfo数字证书格式(你提供的第一种格式)和PKCS
    CryptoAPI标准有CSP Parameter(后面的那种格式)和CSP容器。他们之间是可以进行转换的,可以参考:http://www.jensign.com/JavaScience/dotnet/JKeyNet/RSA非对象加密在同一种填充模式和保持相同字节顺序下的加解密结果是相同的。