我遇到编码字符串的问题。我有一个字符串,从我的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"?>
谢谢你们