String.java,错误为“;无法解析符号“;编撰中

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"));

当我用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类)中有许多错误