Android getBytes(“ISO-8859-1”)返回错误值

时间:2016-07-22 08:55:07

标签: java android character-encoding iso-8859-1

我遇到编码字符串的问题。我有一个字符串,从我的Android应用程序中的soap请求返回。这个字符串由AES用密钥和ivs加密。问题是char“à”显示为“?”。这是代码:

SoapPrimitive response = (SoapPrimitive) envelope.getResponse();
String xmlCryptResponse = response.toString();
String decrypt = AES64.decrypt(key, ivs, xmlCryptResponse );

这是AES64类:

public class AES64 {
public static String encrypt(String key, String ivs, String value) {
    try {
        IvParameterSpec iv = new IvParameterSpec(ivs.getBytes("ISO-8859-1"));

        SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes("ISO-8859-1"),
                "AES");
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
        cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
        byte[] encrypted = cipher.doFinal(value.getBytes("ISO-8859-1"));
        String r = Base64.encodeToString(encrypted, Base64.DEFAULT);
        return r;
    } catch (Exception ex) {
        ex.printStackTrace();
    }
    return null;
}

public static String decrypt(String key, String ivs, String encrypted) {
    try {
        IvParameterSpec iv = new IvParameterSpec(ivs.getBytes("ISO-8859-1"));

        SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes("ISO-8859-1"),
                "AES");
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
        cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
        byte[] original = cipher.doFinal(Base64.decode(encrypted.getBytes("ISO-8859-1"), Base64.DEFAULT));

        return new String(original);

    } catch (Exception ex) {
        ex.printStackTrace();
        return ex.toString();
    }
  }
}

我在java控制台应用程序中使用相同的字符串响应,它工作正常,字符“à”被识别,类AES64类似,唯一的区别是在java应用程序中我使用java.util.Base64而不是android.util .Base64。 我不明白为什么在android,ISO-8859-1 returs错误的char。 你能帮我吗??我花了几天时间来解决这个问题,但没有。

PS:这是从字符串响应解密的xml的开始:

<?xml version="1.0" encoding="iso-8859-1"?>

谢谢你们

0 个答案:

没有答案