php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #26733 End of an array created by explode corrupted
Submitted: 2003-12-28 14:01 UTC Modified: 2003-12-28 14:13 UTC
From: n0spam_socrate_omega at hotmail dot com Assigned:
Status: Not a bug Package: mcrypt related
PHP Version: 4.3.4 OS: Windows XP Home/Pro
Private report: No CVE-ID: None
Anyone can comment on a bug. Have a simpler test case? Does it work for you on a different platform? Let us know!
Just going to say 'Me too!'? Don't clutter the database with that please !
Your email address:
MUST BE VALID
Solve the problem:
45 - 1 = ?
Subscribe to this entry?

 
 [2003-12-28 14:01 UTC] n0spam_socrate_omega at hotmail dot com
Description:
------------
I have a string encrypted with mcrypt and encoded in base64. I unbase64 this string and I decrypt it using mcrypt. I got the exact same string but when I try to explode it into an array with the explode() function, I cannot make comparison == with the last element of the newly created array.

Reproduce code:
---------------
$key = "validkey";
$input = base64_decode($txtEncrypted);	
$decrypted = mcrypt_ecb(MCRYPT_RIJNDAEL_128, $key, $input, MCRYPT_DECRYPT);

echo $decrypted."<br>";

$array_data = explode('||', $decrypted);

echo "|".$array_data."|<br>";

if ($array_data[8] == 'end') {
   echo "it works!";
}

Expected result:
----------------
data||ddata||daata||dadta||dasta||datad||daata||datsa||end
|end|
it works!

Actual result:
--------------
data||ddata||daata||dadta||dasta||datad||daata||datsa||end
|end|


Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2003-12-28 14:12 UTC] derick@php.net
This is not a bug. If you use a block cipher like Rijndael then mcrypt needs to pad your data with zeroes to fill up the whole block to encrypt. If you are decrypting the encrypted string those trailing zeroes are still there, and thus the comparison of the last element fails. 

Before you start asking if we can't trim the string while decrypting; no this is not possible because we don't know if you are encrypting binary data (which might end in a zero) or not. You'll have to take care of this yourself then by using rtrim during comparison.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Fri Dec 06 17:01:27 2024 UTC