-1

I am sending data to API and They uses Java Function, I Replicated Encryption in PHP but I am unable to Decrypt Response Data.

I tried Various Encryption but They Strictly Use this Encryption Decryption, I cannot Change Encryption I had to follow this.

Encryption Function Works Properly:

function encrypt($input, $key) {
        $size = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);
        $input = pkcs5_pad($input, $size);
        $td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_ECB, '');
        $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
        mcrypt_generic_init($td, $key, $iv);
        $data = mcrypt_generic($td, $input);
        mcrypt_generic_deinit($td);
        mcrypt_module_close($td);
        $data = base64_encode($data);
        return $data;
    }

    function pkcs5_pad($text, $blocksize) {
        $pad = $blocksize - (strlen($text) % $blocksize);
        return $text . str_repeat(chr($pad), $pad);
    }

Decryption Function I tried:

function decrypt($sStr, $sKey) {
        $decrypted = mcrypt_decrypt(
                MCRYPT_RIJNDAEL_128, $sKey, base64_decode($sStr), MCRYPT_MODE_ECB
        );
        $dec_s = strlen($decrypted);
        $padding = ord($decrypted[$dec_s - 1]);
        $decrypted = substr($decrypted, 0, -$padding);
        return $decrypted;
    }

As an Output I am Getting ??? which is wrong Encryption.

Do not Duplicate this As I have Searched More than 3 hours, then I posted Question.

Niraj dev
  • 11
  • 6
  • Before trying to solve your problem with these functions, you probably should [take a look at this post](https://stackoverflow.com/questions/41272257/mcrypt-is-deprecated-what-is-the-alternative) about mcrypt deprecation. In the original question the OP wants to encrypt passwords instead of hashing them, which is a bad idea, but you can find useful links and answers in the post. – Kaddath May 24 '19 at 10:04
  • @Kaddath API provider Uses this Functions We have to FOllow, If you read the question carefully I have Already Stated That I Have to use this encryption. – Niraj dev May 27 '19 at 09:27
  • Yes, I understood that, my suggestion is not about using a different encryption method, but using a different function to encrypt/decrypt your AES. For example in [this answer you have an example of converting your code from mycrypt to openSSL for the same encryption method](https://stackoverflow.com/a/48121594/7393478). This is not actually an error in your code, just an advice as it will break if you update your PHP version to one where `mycrypt` is removed – Kaddath May 27 '19 at 09:36
  • @Kaddath okay Thanks – Niraj dev May 27 '19 at 12:43

1 Answers1

0
function decrypt($sStr, $sKey) {
        $decrypted = mcrypt_decrypt(
                MCRYPT_RIJNDAEL_128, $sKey, base64_decode($sStr), MCRYPT_MODE_ECB
        );
        $dec_s = strlen($decrypted);
        $padding = ord($decrypted[$dec_s - 1]);
        $decrypted = substr($decrypted, 0, -$padding);
        $decrypted = base64_encode($decrypted );    //This line Added.
        return $decrypted;
    }

I was getting Byte format I wasn't converting the data into base64_encode, Now It is Working.

Niraj dev
  • 11
  • 6