Since mcrypt_encrypt is no longer supported in PHP 7.2, I am trying for exact alternate to this function.
After reading many SO answers I have found the following code which uses PHPSECLIB, but it's not producing the exact encrypted text as mcrypt.
function encryptRJ256($key,$iv,$string_to_encrypt)
{
// $rtn = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $string_to_encrypt, MCRYPT_MODE_CBC, $iv);
$rijndael = new Crypt_Rijndael(CRYPT_RIJNDAEL_MODE_CBC);
$rijndael->setKey($key);
$rijndael->setIV($iv);
$rijndael->setKeyLength(256);
$rijndael->disablePadding();
$rijndael->setBlockLength(256);
$rtn = $rijndael->encrypt($string_to_encrypt);
$rtn = base64_encode($rtn);
return($rtn);
}
My Key and IV is
$ky = 'lkirwf897+22#bbtrm8814z5qq=498j5';
$iv = '741952hheeyy66#cs!9hjv887mxx7@8y';
The first 42 chars are equal but the rest is different as you can see
Text to encrypt: 57F0-ECD3-1A3B-341E-BA39-F81B-F020-0DE0
mcrypt_encrypt output:
3uw7mVZthiIPPNosvppZHd1jEau3Ul+0BQ4AVS2t80skauq3Zv9z5uztvmiBpYqQcKGIDP5YHfdEBhPBfdVbxg==phpseclib output:
3uw7mVZthiIPPNosvppZHd1jEau3Ul+0BQ4AVS2t80tKnjjxVhuAwh3E1S5OnH1up5AujvQu1Grgyv16tNIEDw==
I need to produce the same encrypted text because this text is decrypted by another program which I can't change.
So my question is, is it possible to produce the same encrypted text as mcrypt_encrypt using phpseclib or any other way?
You might need to "pad all the things"
If you read this entry on leaseweb it states over and over that mcrypt pads thing automatically to the correct block sizes that it can chew. That leads of course to different outputs because of all the null bytes.
So I'd suggest you make sure all your data you feed into your phpseclib code are padded with the correct amount of null bytes to simulate the input mcrypt feeds into the cipher.
Default if you look at the code of PHPSECLIB it pads by a character decided by the number of characters to pad.
mcrypt however pads with character 0.
So, let's fix this.
The changed code you need is:
I used the latest version of PHPSECLIB as avaialble on github, so my code differs from your example code. This is the full working example on my machine.