Php以不可读的格式返回解密的字符串

时间:2013-02-27 09:17:08

标签: php encryption

我有一个应用程序,我需要将用户的名称转换为加密格式,然后在php中解密。我的加密代码效果很好。但是在php端,解密的字符串总是包含两到三个不可读格式的附加字符。我只是不明白从哪里获取这些额外的字符?它与填充有关吗? 我发布了android代码和php代码。

Android端代码

public String encryptStringWithAES(String Message) throws Exception {

    String key = "123456789abcdefg";

    String iv = "1234567890123456";

    String padding = "ZeroBytePadding";


    SecretKeySpec spec = new SecretKeySpec(key.getBytes("UTF8"), "AES");

    Cipher cipher = Cipher.getInstance("AES/CBC/" + padding);



    IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());


    cipher.init(Cipher.ENCRYPT_MODE, spec, ivspec);

    byte[] array = cipher.doFinal(Message.getBytes());

    System.out.println("encrypted ARRAY LENGHT:" + array.length);

    String encoded_string = android.util.Base64.encodeToString(array, 0,
    array.length, Base64.NO_PADDING);

    System.out.println("Requested encoded string: " + encoded_string);
    return encoded_string;

}

PHP端代码:

$key_for_AES='123456789abcdefg';

$iv='1234567890123456';



$message=$_POST['msg'];

$decoded_string=base64_decode($message);

$decrypted_string=mcrypt_decrypt('rijndael-128',$key_for_AES, $decoded_string,'cbc',$iv);

2 个答案:

答案 0 :(得分:0)

我认为你可能有字符编码问题。 Android代码使用UTF-8进行字符串编码。因此,确保从android到php的整个数据流都使用此编码。

我的具体建议是检查php脚本文件的编码。您还必须确定UTF-8编码是否包含BOM或没有。

编辑:

当我说“编码”时,我会想到“character encoding”。 android负责字符编码的代码可能是这样的:

key.getBytes("UTF8")

我不知道您使用的是哪个编辑器,但您应该检查为您正在使用的php脚本文件设置的字符编码。确保它是UTF-8。并且使用BOM和没有它进行测试,因为我不确定andorid正在使用什么。

答案 1 :(得分:0)

我最近使用C#和PHP获得了类似的编程经验。

可能是解密对象包含空字符。你可以尝试剥离它们。我还从字符串末尾删除了回车符:

$decrypted_string = str_replace("\0", "", $Decrypted);
$decrypted_string = str_replace("\r", "", $Decrypted);
$decrypted_string = str_replace("\n", "", $Decrypted);