Search code examples
phpphp-openssl

From RSAUtils.encryptByPublicKey (Java) to openssl_public_encrypt (PHP)


I am trying from Java code to convert in the php using openssl_public_encrypt but can not manage at list to ge back an output.

Would appreciate if somebody can help

MerchantPublicSecretKey = 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDrXM8q2qrEuH+xFVcEpeiV4yX7r/5+SsjgLD/OF3VPYqKA07xOklLXhJqT8Shjtu/uye9BahqajqOiP9PjqAsN1amGodE1POhsAO537Av+pIh1sX1ULr+0fzxWzwphE3SX2dImTwWWxdZZB45P2GMtR1F+jA4E2Ud8oO1KIaX++QIDAQAB'

userInfoJson = {
         "payCardNo":"test1",
         "payCardBank":"test2",
         "payCardBranch":"test3"        
   } 

Java Code
sign = =Base64Utils.encode(RSAUtils.encryptByPublicKey(userInfoJson.getBytes("UTF-8"), MerchantPublicSecretKey));

Solution

  • I managed to solve the issue, if will help somebody here is the solution

    $app_secret = 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDrXM8q2qrEuH+xFVcEpeiV4yX7r/5+SsjgLD/OF3VPYqKA07xOklLXhJqT8Shjtu/uye9BahqajqOiP9PjqAsN1amGodE1POhsAO537Av+pIh1sX1ULr+0fzxWzwphE3SX2dImTwWWxdZZB45P2GMtR1F+jA4E2Ud8oO1KIaX++QIDAQAB';
    
    $user_data= [
      "payCardNo" => "test1",
      "payCardBank"  =>  "test2",
      "payCardBranch"  =>  "test3"
    ];
    
    function encryptData ($user_data){
        $user = json_encode($user_data, JSON_FORCE_OBJECT);
        $pub_key = chunk_split($app_secret, 64, "\n");
        $pub_key = "-----BEGIN PUBLIC KEY-----\n" . $pub_key . "-----END PUBLIC KEY-----\n";
        $key = openssl_pkey_get_public($pub_key);
    
        $result  = '';
        for($i = 0; $i < strlen($user) / 117; $i++  ) {
            $data = substr($user, $i * 117, 117);
            openssl_public_encrypt ($data, $encrypt, $key);
            $result .= $encrypt;
        }
        return base64_encode($result);
    }
    
    // usage
    $encrypted_data = encryptData($user_data);