Tuesday, 10 September 2013

Android can't decode PHP base64 code

Android can't decode PHP base64 code

I'm trying to decode my Base64 code that encoded by my PHP server, It's
work and will be decoded with PHP normally but when I trying to encode it
through my Android phone I got the following error:
Base64DecoderException: encoded value has invalid trailing byte
My Base64 Code:
oLAwb6uSn2JXqAFTX+qJXaOawOYF3kDDK2HlCb7ItCeimVCsDE7OYH5OgsixKpIAM6KgkCktnB4HsLQtA5Ig1fQvDrRcct9dQi4m8wPpF7a3sFHSG29j2aItKeouflTtsSZgKWvSjg0gBBGM/7PlvkuK+8W4/GXS0QrqV1jcngWrspYmAdi0GiJbPm8b/zlscOIa1z1df11SuQH5+GiUzqZ4WDFOpoH0WWVW3KmbMQ2yifBmXnhn80qZct6KiN7aL8PHEczhNrRqAKfUuEwmsWOnEOyh7UOU6FcnW3VAo2BWd5dJRGgWb5Py09l0XmrdWdzin7klKtMqXOWQRcvEVT7PKtQxQotRpOa+2IQQirVfybyuMipY9YORuW1hqmc95Tdt1WHdIzVwEtq6NXx9AC5mSklbxrcOpINfS2RPFcK0UUMV2xQKAQ+u8PzTj/KBEmb04ObBbnX6y3uL1KT58lDecA9lIbNYuttlgRMzRdxFOvkk21wou2vtMBtIxk0XFJJGjazqqcxVeSxTvQ68wdNSkRmvteowkSq2Vi09CmOhToRHemFyZgKTxSBoNaFuVuYGVggEFIR9kHVrLxoK2Q==
--------- My Code Side ---------
Server Side
echo toAES("some stringe");
function pkcs5_pad($text, $blocksize) {
$pad = $blocksize - (strlen($text) % $blocksize);
return $text . str_repeat(chr($pad), $pad);
}
function toAES($sStr) {
error_reporting(E_ERROR | E_PARSE);
$sKey = '1234567891234567';
$size = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);
$sStr = pkcs5_pad($sStr, $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, $sKey, $iv);
$data = mcrypt_generic($td, $sStr);
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
$data = base64_encode($data);
return $data;
}
function fromAES($sStr) {
error_reporting(E_ERROR | E_PARSE);
$sKey = '1234567891234567';
$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;
}
My Java Code (Assuming that we transfer the above result somehow)
try
{
SecretKeySpec mSecretKeySpec = new
SecretKeySpec('1234567891234567'.getBytes(), "AES");
byte[] decrypted = Base64.decode(s.getBytes("UTF-8"),
Base64.Deafult);
Cipher mCipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
mCipher.init(Cipher.DECRYPT_MODE, mSecretKeySpec);
return new String(mCipher.doFinal(decrypted));
}
catch (Exception e)
{
e.printStackTrace();
return null; // Always return null with the posted error
}
Any ideas?

No comments:

Post a Comment