请问一下 Java 生成的 rsa 密钥有办法可以转换为 PHP 可读么

2020-06-03 08:38:40 +08:00
 kangsgo

需要对接对方平台,对方给了一对 JAVA 生成的密钥,公钥加密私钥解密


私钥:   MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAqxc7Qc1vV7TP5Z5rxmDt7Qmofu5ML6Ocg3RD2mrlrKmIF7X17QhrQZNk9bPi5aOrEnd2Yas0fOe1UMqizQknRwIDAQABAkBntr2FNjO4xzL_zvkmWLviZWhvCaXFezj1txUq4oI4F832rTp6g_RC_qNCaoyXG8pP1o6_Ex9uSd78RNcxyh4BAiEA6Goij3zW4CZmRC4cHJA3NkX_NGYSZEWh9Op3XG6etbcCIQC8c_knSl2TTzlA8L6MEiXSphxM-nNltBFkzm7H0jCa8QIgcN5SSGK1K4gadBP8fPagiY_2vyiu19llLL7NFqt2EgMCIE8V4FaTx8ddNOrC3URNDWBkY3YOmMTyl2YVl7n1xH4RAiEAlwhXLYqumZgDsEMzrupPvHR_mQ2AcslrwnEqlRCqvY8

我用公钥加密以后到对方平台得到的数据

XPc8EmPRO66Nie5Y9VMooprl14gY_l5kVqMWIP8rJOjRHXCqaekPK9gKUlxrdxyscJLbmNgXYGr5m8v-PrpLig

通过私钥用 php 并解不开,我查了一下网上说可以用支付宝的工具转换,但是转换了几次都提示密钥不正确,对方说密钥在 JAVA 上是正常的,所以想请大家帮看一下有没有办法解决,谢谢

3509 次点击
所在节点    PHP
16 条回复
jay4497
2020-06-03 08:42:35 +08:00
试试 phpseclib ?
neighbads
2020-06-03 08:45:30 +08:00
私钥拷贝少了吧,结尾少了 7 字节。
kangsgo
2020-06-03 08:46:46 +08:00
@neighbads 再三和他们确认了,那边说就是这个私钥额,我自己用在线的好像也不对
klgd
2020-06-03 08:47:47 +08:00
可以的 规则是相同的
nielinjie
2020-06-03 08:49:26 +08:00
可能是 java 生成的时候出了什么问题吧。秘钥这个东西是语言无关的,但只是理论上。哪个环节都可能出幺蛾子。
sadfQED2
2020-06-03 09:07:42 +08:00
私钥最好别在公网上面乱发吧,你都不怕出事么😂😂
lululau
2020-06-03 09:07:51 +08:00
常用的格式无非就是 pkcs8, pkcs12,openssl 命令转一下就可以了,跟编程语言没关系。另外按说一般场景下用不着自己做 rsa 加解密吧,https 不香吗,你要是说用来签名 /校验签名还能理解
xiangyuecn
2020-06-03 09:16:48 +08:00
试了一下这个,还以为是什么妖魔鬼怪

帮你格式化一下

-----BEGIN RSA PRIVATE KEY-----
MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAqxc7Qc1vV7TP5Z5rxmDt7Qmofu5ML6Ocg3RD2mrlrKmIF7X17QhrQZNk9bPi5aOrEnd2Yas0fOe1UMqizQknRwIDAQABAkBntr2FNjO4xzL/zvkmWLviZWhvCaXFezj1txUq4oI4F832rTp6g/RC/qNCaoyXG8pP1o6/Ex9uSd78RNcxyh4BAiEA6Goij3zW4CZmRC4cHJA3NkX/NGYSZEWh9Op3XG6etbcCIQC8c/knSl2TTzlA8L6MEiXSphxM+nNltBFkzm7H0jCa8QIgcN5SSGK1K4gadBP8fPagiY/2vyiu19llLL7NFqt2EgMCIE8V4FaTx8ddNOrC3URNDWBkY3YOmMTyl2YVl7n1xH4RAiEAlwhXLYqumZgDsEMzrupPvHR/mQ2AcslrwnEqlRCqvY8=-----END RSA PRIVATE KEY-----


XPc8EmPRO66Nie5Y9VMooprl14gY/l5kVqMWIP8rJOjRHXCqaekPK9gKUlxrdxyscJLbmNgXYGr5m8v+PrpLig==


{"flowRate":0.00,"usedRate":0.00,"status":0}





使用的我自己写的一套轮子

https://github.com/xiangyuecn/RSA-java

https://github.com/xiangyuecn/RSA-csharp
Jrue0011
2020-06-03 09:20:05 +08:00
搜了下网上 PHP 的 RSA 加解密,貌似都是用的 openssl_pkey_get_private,java 给的公钥私钥在 php 里应该要存储为 PKCS # 8 格式的文件,大概是这样

公钥文件:
-----BEGIN PUBLIC KEY-----
公钥 base64 编码
-----END PUBLIC KEY-----

私钥文件:
-----BEGIN PRIVATE KEY-----
私钥 base64 编码
-----END PRIVATE KEY-----

另外帖子里的私钥和加密内容转的字符串是 base64 编码吗,不清楚是不是 V2 把"+"和"/"转码了
neighbads
2020-06-03 09:21:56 +08:00
确实妖魔鬼怪。。。。。 实际是 base64 编码问题:

_ 换成 /

- 缓存 +

然后数据就对了
object123
2020-06-03 09:42:08 +08:00
chunk_split("\n",$秘钥,64);每行 64 个字符分割换行
mandex
2020-06-03 09:51:19 +08:00
私钥为什么发网上啊,赶紧删了吧
kangsgo
2020-06-03 09:59:26 +08:00
@sadfQED2 测试用的,实际上不是用这个
xiaooloong
2020-06-03 10:03:35 +08:00
@neighbads 估计是为了为了在 http 协议里传输,避免 base64 之后再进行一次 urlencode,直接把 base64 魔改了
fiypig
2020-06-03 10:09:08 +08:00
一般来说要加头部尾部的
也要确认是 pkcs8 还是 pkcs#1
-----BEGIN RSA PRIVATE KEY-----
-----END RSA PRIVATE KEY-----

-----BEGIN PRIVATE KEY-----
-----END PRIVATE KEY-----
kangsgo
2020-06-03 13:46:47 +08:00
@Jrue0011 没有转码,是那边给转了,晕晕晕

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/678078

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX