首页 新闻 会员 周边

rsa加密C#和java互通的问题。

0
[待解决问题]

C#私钥加密公钥解密的报错,是java提供的一个xml的公钥。我C#按照这个解密有问题。key是公钥。sign是需要解密的东西。求帮助。求测试下。

string key =
"<RSAKeyValue><Modulus>sbZLsASOp6LzeiCqD9wFHu70J0/tzamMtEiahk3+LubFrio+o8KbwUn9ew6ARgFz1X80I7Zd8Tcpp//O3O6sw86JZQR9XVwHYOaJcKdLQFFRFgyrgoGhRo7Kp602MU7zqk39SdPJiEH9054JMNVrjQXQA1IgbE5YKTvZPn3yC+M=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>";
string sign = "Ss5X3eGlimQ5ZIPSYo1wNQQ2gUIkLnM+OrFcpf0+Pa+f7xshGdTQtjNPWvKuu6bkteaBuHEPVjHe9hKi5/7RTS2+9UCqxJrcw4xX3TNDaDqa9DjRhOqdL72Scgc+iASCwC7YEBtDEm2YieIOVCur5UItUB4IwFNIsdCSO/v4Las=";

高卿的主页 高卿 | 初学一级 | 园豆:8
提问于:2016-01-18 11:11
< >
分享
所有回答(1)
0

C# 和 java rsa 存在一个 bigInt 类型的差异,所以经常会不一样的。

LZ可以找点这些资料,我就贴一个不确定能用。

http://www.cnblogs.com/midea0978/articles/2283161.html

 

之前有见过支付宝的一个大神,在C#端 自定义实现了一个 bigInt 解决的。

还有就是可以直接把 java 端的jar 包 转成dll,然后直接在项目里面使用。

Sky.Grain | 园豆:308 (菜鸟二级) | 2016-01-18 15:13
 关于C#rsa解密的问题,代码里面引用了BouncyCastle.CS文件,但是解出来的结果乱码 

static void Main(string[] args)
        {

            var rsaHelper = new RsaHelper();
            var test1 =
               "i0s9lv0QuefmmXWkWxqIwJMcK1/uOjTTIpc0K2YWAwFGuMSbQ651Zfl4i7MY/Qi/vG8+J7SRyb3UWiS5CNP3M3MI2tC6l2CVAGv0godSMaeWbMqj9g17KwJr9r3EYtPvc8lRi8ec3qS8plkoPUCoz3PtsK LZ9hBlAXKD3f8qGDI=";
            var key = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCxtkuwBI6novN6IKoP3AUe7vQnT +3NqYy0SJqGTf4u5sWuKj6jwpvBSf17DoBGAXPVfzQjtl3xNymn/87c7qzDzollBH1dXAdg5olwp0tAUVEWDKuCgaFGjsqnrTYxTvOqTf1J08mIQf3Tngkw1WuNBdADUiBsTlgpO9k+ffIL4wIDAQAB";
            var source = rsaHelper.DecryptByPublibKey(test1, key);
            Console.WriteLine("通过公钥解密后的原文是:{0}", source);

            Console.ReadKey();

        }


  /// <summary>
        /// 公钥解密(key公钥解密)- 必须对应私钥加密
        /// </summary>
        /// <param name="source">加密后的数据(密文)</param>
        /// <param name="publicKey">公钥</param>
        /// <returns></returns>
        public string DecryptByPublibKey(string source, string publicKey)
        {
            var publicInfoByte = Convert.FromBase64String(publicKey);
            Asn1Object pubKeyObj = Asn1Object.FromByteArray(publicInfoByte);//这里也可以从流中读取,从本地导入  
            AsymmetricKeyParameter pubKey = PublicKeyFactory.CreateKey(SubjectPublicKeyInfo.GetInstance(pubKeyObj));
            //开始解密
            IAsymmetricBlockCipher cipher = new RsaEngine();
            cipher.Init(false, pubKey);
            //解密已加密的数据
            byte[] encryptedData = Convert.FromBase64String(source);
            encryptedData = cipher.ProcessBlock(encryptedData, 0, encryptedData.Length);
            return Encoding.UTF8.GetString(encryptedData, 0, encryptedData.Length);
        }

支持(0) 反对(0) 高卿 | 园豆:8 (初学一级) | 2016-01-19 11:45

@高卿: java 的语言环境没有.net那么智能,乱码应该是编码格式的问题。

我们当时处理这个问题时,是直接只用了对方提供的 java示例代码,转成dll使用后 通过。

bigInt 的处理方式,尝试了多次没有成功,但晚上有人成功使用bigInt类型的案例

支持(0) 反对(0) Sky.Grain | 园豆:308 (菜鸟二级) | 2016-01-19 11:48
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册