V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
kangsgo
V2EX  ›  PHP

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

  •  
  •   kangsgo · 2020-06-03 08:38:40 +08:00 · 3246 次点击
    这是一个创建于 1395 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    
    私钥:   MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAqxc7Qc1vV7TP5Z5rxmDt7Qmofu5ML6Ocg3RD2mrlrKmIF7X17QhrQZNk9bPi5aOrEnd2Yas0fOe1UMqizQknRwIDAQABAkBntr2FNjO4xzL_zvkmWLviZWhvCaXFezj1txUq4oI4F832rTp6g_RC_qNCaoyXG8pP1o6_Ex9uSd78RNcxyh4BAiEA6Goij3zW4CZmRC4cHJA3NkX_NGYSZEWh9Op3XG6etbcCIQC8c_knSl2TTzlA8L6MEiXSphxM-nNltBFkzm7H0jCa8QIgcN5SSGK1K4gadBP8fPagiY_2vyiu19llLL7NFqt2EgMCIE8V4FaTx8ddNOrC3URNDWBkY3YOmMTyl2YVl7n1xH4RAiEAlwhXLYqumZgDsEMzrupPvHR_mQ2AcslrwnEqlRCqvY8
    

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

    XPc8EmPRO66Nie5Y9VMooprl14gY_l5kVqMWIP8rJOjRHXCqaekPK9gKUlxrdxyscJLbmNgXYGr5m8v-PrpLig
    

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

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

    帮你格式化一下

    -----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
        9
    Jrue0011  
       2020-06-03 09:20:05 +08:00   ❤️ 1
    搜了下网上 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
        10
    neighbads  
       2020-06-03 09:21:56 +08:00   ❤️ 1
    确实妖魔鬼怪。。。。。 实际是 base64 编码问题:

    _ 换成 /

    - 缓存 +

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

    -----BEGIN PRIVATE KEY-----
    -----END PRIVATE KEY-----
    kangsgo
        16
    kangsgo  
    OP
       2020-06-03 13:46:47 +08:00
    @Jrue0011 没有转码,是那边给转了,晕晕晕
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5872 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 02:19 · PVG 10:19 · LAX 19:19 · JFK 22:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.