c#客户端RSA私钥加密后,服务端Java公钥没法解密,求解决方法!

datahandler2 2016-01-20 11:18:43
印象中C# 提供的RSA加密都是公钥加密私钥解密的。。。但因为调用第三方java支付公司历史遗留问题。没法更改,只能是我这边c# 读取pfx文件获取私钥后,然后利用c# 私钥加密提交到对方java服务端。。。
这样导致的问题是我用私钥加密后,对方java程序没法用公钥解密。。。请问各位大哥如何解决???
...全文
639 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
青云小凡 2016-09-23
  • 打赏
  • 举报
回复
不知道楼主解决了没有?我也遇到同样的问题不知道怎么解决。
  • 打赏
  • 举报
回复
引用 9 楼 tiancaolin 的回复:
[quote=引用 6 楼 xomix 的回复:] [quote=引用 楼主 tiancaolin 的回复:] 印象中C# 提供的RSA加密都是公钥加密私钥解密的。。。但因为调用第三方java支付公司历史遗留问题。没法更改,只能是我这边c# 读取pfx文件获取私钥后,然后利用c# 私钥加密提交到对方java服务端。。。 这样导致的问题是我用私钥加密后,对方java程序没法用公钥解密。。。请问各位大哥如何解决???
java的私钥加密不加动盐,结果始终一致,跟md5一个尿性。 要服务端解密,可以加个参数,然后用服务端从c#的服务端获取解密信息。 或者有人写过java解密c#的加密结果方法,你也可以去找找,百度关键字应该就是 java c# rsa [/quote] 尝试过了。。。除非将对方的java方法用IKVM.net转换成.net 项目引用。不然也是用不了。。。[/quote] IKVM.net当前(7.2.3)版本有致命错误,当你的.net内部语言非英文时,rsa加密的部分无法执行。 基本上这个问题没有好的解决方案,淘宝都加上了md5加盐验证。
xdashewan 2016-01-20
  • 打赏
  • 举报
回复
这种方案你可以参考下http://blog.csdn.net/road2010/article/details/40071977
datahandler2 2016-01-20
  • 打赏
  • 举报
回复
引用 1 楼 dongxinxi 的回复:
你要知道,.pfx 由Public Key Cryptography Standards #12,PKCS#12标准定义,包含了公钥和私钥的二进制格式的证书形式,以pfx作为证书文件后缀名。 .cer证书却没有私钥,只有公钥,并且可由pfx来导出 然后用.cer证书来加密传输 导出命令 openssl pkcs12 -in certificate.pfx -out certificate.cer -nodes 或者装VS,双击pfx文件,导入证书,然后进入证书控制台,右键导出证书
我真不明白你的意思。。。。我本地已经有一个pfx文件,并知道这个pfx文件的密码了。。我通过如下代码,不就可以正常获取到对应的公钥和私钥?为什么我还需要像你说的那样要导出一个cer再来加密???

     var pfxPath="c:\aaaa-test.pfx"  //密码 123456
       X509Certificate2 pc = new X509Certificate2(pfxPath, "123456", X509KeyStorageFlags.Exportable);
            
            var publicKey = pc.PublicKey.Key.ToXmlString(false);
            var privateKey = pc.PrivateKey.ToXmlString(true);
           
  • 打赏
  • 举报
回复
你要知道,.pfx 由Public Key Cryptography Standards #12,PKCS#12标准定义,包含了公钥和私钥的二进制格式的证书形式,以pfx作为证书文件后缀名。 .cer证书却没有私钥,只有公钥,并且可由pfx来导出 然后用.cer证书来加密传输 导出命令 openssl pkcs12 -in certificate.pfx -out certificate.cer -nodes 或者装VS,双击pfx文件,导入证书,然后进入证书控制台,右键导出证书
datahandler2 2016-01-20
  • 打赏
  • 举报
回复
引用 6 楼 xomix 的回复:
[quote=引用 楼主 tiancaolin 的回复:] 印象中C# 提供的RSA加密都是公钥加密私钥解密的。。。但因为调用第三方java支付公司历史遗留问题。没法更改,只能是我这边c# 读取pfx文件获取私钥后,然后利用c# 私钥加密提交到对方java服务端。。。 这样导致的问题是我用私钥加密后,对方java程序没法用公钥解密。。。请问各位大哥如何解决???
java的私钥加密不加动盐,结果始终一致,跟md5一个尿性。 要服务端解密,可以加个参数,然后用服务端从c#的服务端获取解密信息。 或者有人写过java解密c#的加密结果方法,你也可以去找找,百度关键字应该就是 java c# rsa [/quote] 尝试过了。。。除非将对方的java方法用IKVM.net转换成.net 项目引用。不然也是用不了。。。
datahandler2 2016-01-20
  • 打赏
  • 举报
回复
引用 5 楼 dongxinxi 的回复:
你都说了RSA是用公钥加密私钥解密,反过来肯定不行的,公钥是公开的,要是它来解密那还加什么密,传明文得了
人家项目就是这样变态,我咋办?联系了对方公司。。。竟然没一个懂.net的。。。
  • 打赏
  • 举报
回复
引用 楼主 tiancaolin 的回复:
印象中C# 提供的RSA加密都是公钥加密私钥解密的。。。但因为调用第三方java支付公司历史遗留问题。没法更改,只能是我这边c# 读取pfx文件获取私钥后,然后利用c# 私钥加密提交到对方java服务端。。。 这样导致的问题是我用私钥加密后,对方java程序没法用公钥解密。。。请问各位大哥如何解决???
java的私钥加密不加动盐,结果始终一致,跟md5一个尿性。 要服务端解密,可以加个参数,然后用服务端从c#的服务端获取解密信息。 或者有人写过java解密c#的加密结果方法,你也可以去找找,百度关键字应该就是 java c# rsa
  • 打赏
  • 举报
回复
你都说了RSA是用公钥加密私钥解密,反过来肯定不行的,公钥是公开的,要是它来解密那还加什么密,传明文得了
datahandler2 2016-01-20
  • 打赏
  • 举报
回复
引用 3 楼 xdashewan 的回复:
这种方案你可以参考下http://blog.csdn.net/road2010/article/details/40071977
对方似乎是用公钥加密的。。。。

62,244

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧