String.java,错误为“;无法解析符号“;编撰中
当我用ISO-8859-1字符集解密消息时,我遇到了一个问题。我有一个加密和解密的类。代码如下:String.java,错误为“;无法解析符号“;编撰中,java,android,android-studio,Java,Android,Android Studio,当我用ISO-8859-1字符集解密消息时,我遇到了一个问题。我有一个加密和解密的类。代码如下: public class AES64 { public static String encrypt(String key, String ivs, String value) { try { IvParameterSpec iv = new IvParameterSpec(ivs.getBytes("ISO-8859-1"));
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.getEncoder().encodeToString(encrypted);
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.getDecoder().decode(encrypted.getBytes("ISO-8859-1")));
return new String(original);
} catch (Exception ex) {
ex.printStackTrace();
Log.d("ERRORE",ex.toString());
}
return null;
}
}
当我解密字符串并使用
getBytes("ISO-8859-1")
字符串包含的字符不是字符,而是?字符。因此,我转到getBytes
定义,在文件String.java中有许多错误。方法如下:
public byte[] getBytes(String charsetName) throws UnsupportedEncodingException {
return getBytes(Charset.forNameUEE(charsetName));
}
以下是错误:
无法解析符号fonNameUEE()
我的Gradle文件是:
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion '23.0.3'
defaultConfig {
applicationId "com.fd.ts"
minSdkVersion 14
targetSdkVersion 16
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
}
dependencies {
compile 'com.android.support:support-v4:23.4.0'
compile 'com.google.android.gms:play-services:9.2.0'
compile 'com.google.code.ksoap2-android:ksoap2-android:3.6.0'
compile 'com.github.PhilJay:MPAndroidChart:v2.2.5'
compile 'com.viewpagerindicator:library:2.4.1@aar'
compile 'com.google.android.gms:play-services-ads:9.2.0'
compile 'com.google.android.gms:play-services-auth:9.2.0'
compile 'com.google.android.gms:play-services-gcm:9.2.0'
}
PS:在String.java中,Android studio无法导入libcore.utils.CharSetUtils 尝试使用
return getBytes(Charset.forName(charsetName));
而不是
return getBytes(Charset.forNameUEE(charsetName));
在Android版本的Java中,Charset类似乎没有方法fornameue()
,您是否从其他非Android项目获得了该方法
编辑: 由于该方法似乎已编译且无法访问,请尝试使用
ivs.getBytes(Charset.forName("ISO-8859-1"));
key.getBytes(Charset.forName("ISO-8859-1"));
不要传递字符集
名称:-),您可能希望获得此字符集对象一次,并重新使用它以进行优化,但请先这样尝试:-D尝试使用
return getBytes(Charset.forName(charsetName));
而不是
return getBytes(Charset.forNameUEE(charsetName));
在Android版本的Java中,Charset类似乎没有方法fornameue()
,您是否从其他非Android项目获得了该方法
编辑: 由于该方法似乎已编译且无法访问,请尝试使用
ivs.getBytes(Charset.forName("ISO-8859-1"));
key.getBytes(Charset.forName("ISO-8859-1"));
不要传递
Charset
name:-)您可能希望获得此Charset对象一次并重用它以进行优化,但请先这样尝试:-D请发布完整的日志。logcat中没有错误,应用程序在手机上运行,但getBytes未返回正确的字符串格式加密结果为8位字节而非字符。尝试将加密数据编码到任何字符集中都不是一个好主意。通常,如果需要将加密数据编码为字符,则使用Base64或十六进制。注意:ISO-8859-1
肯定是对过去的调用,这只是误用。我要解密的字符串是使用ISO-8859-1字符集的web服务响应。我想他尝试在一个简单的java应用程序中使用同一个类,它工作正常,字符串正确,但在android“a”中无法识别。请注意,ISO-8859-1字符集可以处理Base64编码的数据。请发布完整的logcat。logcat中没有错误,应用程序在手机上运行,但getBytes未返回正确的字符串格式加密结果为8位字节而非字符。尝试将加密数据编码到任何字符集中都不是一个好主意。通常,如果需要将加密数据编码为字符,则使用Base64或十六进制。注意:ISO-8859-1
肯定是对过去的调用,这只是误用。我要解密的字符串是使用ISO-8859-1字符集的web服务响应。我尝试在一个简单的java应用程序中使用同一个类,它工作正常,字符串正确,但在android“a”中无法识别。请注意,ISO-8859-1字符集处理Base64编码的数据很好。getBytes方法在string.java中不在我的类中更新了答案:-)我尝试了charset.forname(),但结果没有改变。我试图使ECaches失效并重新启动,但没有任何变化,logcat输出是否发生变化?String.getBytes()方法中是否仍有错误?在文件String.java类中,CharsetUtils未导入,因此该类(java类)中有许多错误getBytes方法在String.java中,不在我的类中更新了答案:-)我尝试了Charset.forname(),但结果不变。我试图使ECaches失效并重新启动,但没有任何变化,logcat输出是否发生变化?String.getBytes()方法中是否仍有错误?在文件String.java类CharsetUtils未导入中,因此该类(java类)中有许多错误