kangsgo
V2EX  ›  PHP

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

  •  
  •   kangsgo · Jun 3, 2020 · 4709 views
    This topic created in 2350 days ago, the information mentioned may be changed or developed.

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

    
    私钥:   MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAqxc7Qc1vV7TP5Z5rxmDt7Qmofu5ML6Ocg3RD2mrlrKmIF7X17QhrQZNk9bPi5aOrEnd2Yas0fOe1UMqizQknRwIDAQABAkBntr2FNjO4xzL_zvkmWLviZWhvCaXFezj1txUq4oI4F832rTp6g_RC_qNCaoyXG8pP1o6_Ex9uSd78RNcxyh4BAiEA6Goij3zW4CZmRC4cHJA3NkX_NGYSZEWh9Op3XG6etbcCIQC8c_knSl2TTzlA8L6MEiXSphxM-nNltBFkzm7H0jCa8QIgcN5SSGK1K4gadBP8fPagiY_2vyiu19llLL7NFqt2EgMCIE8V4FaTx8ddNOrC3URNDWBkY3YOmMTyl2YVl7n1xH4RAiEAlwhXLYqumZgDsEMzrupPvHR_mQ2AcslrwnEqlRCqvY8
    

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

    XPc8EmPRO66Nie5Y9VMooprl14gY_l5kVqMWIP8rJOjRHXCqaekPK9gKUlxrdxyscJLbmNgXYGr5m8v-PrpLig
    

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

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

    帮你格式化一下

    -----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
    Jrue0011
    Jun 3, 2020❤️1
    9
    搜了下网上 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
    neighbads
    Jun 3, 2020❤️1
    10
    确实妖魔鬼怪。。。。。 实际是 base64 编码问题:

    _ 换成 /

    - 缓存 +

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

    -----BEGIN PRIVATE KEY-----
    -----END PRIVATE KEY-----
    kangsgo
    kangsgo
    OP
    Jun 3, 2020
    16
    @Jrue0011 没有转码,是那边给转了,晕晕晕
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1243 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 17:25 · PVG 01:25 · LAX 09:25 · JFK 12:25
    ♥ Do have faith in what you're doing.