clcurie_11 2013-09-11 03:08 采纳率: 6.7%
浏览 2439

Android 不能解码 PHP base64 代码

我想解码Base64代码,再通过PHP服务器编码。程序能正常运行能使用PHP解码,但是当我通过Android手机解码时,有下面的错误:

Base64DecoderException: encoded value has invalid trailing byte

Base64 Code:

oLAwb6uSn2JXqAFTX+qJXaOawOYF3kDDK2HlCb7ItCeimVCsDE7OYH5OgsixKpIAM6KgkCktnB4HsLQtA5Ig1fQvDrRcct9dQi4m8wPpF7a3sFHSG29j2aItKeouflTtsSZgKWvSjg0gBBGM/7PlvkuK+8W4/GXS0QrqV1jcngWrspYmAdi0GiJbPm8b/zlscOIa1z1df11SuQH5+GiUzqZ4WDFOpoH0WWVW3KmbMQ2yifBmXnhn80qZct6KiN7aL8PHEczhNrRqAKfUuEwmsWOnEOyh7UOU6FcnW3VAo2BWd5dJRGgWb5Py09l0XmrdWdzin7klKtMqXOWQRcvEVT7PKtQxQotRpOa+2IQQirVfybyuMipY9YORuW1hqmc95Tdt1WHdIzVwEtq6NXx9AC5mSklbxrcOpINfS2RPFcK0UUMV2xQKAQ+u8PzTj/KBEmb04ObBbnX6y3uL1KT58lDecA9lIbNYuttlgRMzRdxFOvkk21wou2vtMBtIxk0XFJJGjazqqcxVeSxTvQ68wdNSkRmvteowkSq2Vi09CmOhToRHemFyZgKTxSBoNaFuVuYGVggEFIR9kHVrLxoK2Q==

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

 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
    }
  • 写回答

1条回答 默认 最新

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-01-31 07:33
    关注

    你在服务器上使用的是 PHP 函数 base64_encode 对数据进行编码,而在 Android 上使用的是 Java 类库的 Base64.decode 解码,两者的编码标准不同,导致解码失败。


    请使用 Java 类库中的 Base64.decode 编码方式,或者在服务器上替换为 Java 中的标准编码方式。

    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器