Java 安卓加密

Java 安卓加密,java,android,encryption,Java,Android,Encryption,我一直在尝试将字符串加密合并到我的应用程序中,我有一个名为Encrypt的类: import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec; import android.os.Build; import android.util.Base64; import android.util.Log

我一直在尝试将字符串加密合并到我的应用程序中,我有一个名为Encrypt的类:

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import android.os.Build;
import android.util.Base64;
import android.util.Log;

public class Encrypt {

private String charsetName = "UTF8";
private String algorithm = "DES";
private int base64Mode = Base64.DEFAULT;

public String getCharsetName() {
    return charsetName;
}

public void setCharsetName(String charsetName) {
    this.charsetName = charsetName;
}

public String getAlgorithm() {
    return algorithm;
}

public void setAlgorithm(String algorithm) {
    this.algorithm = algorithm;
}

public int getBase64Mode() {
    return base64Mode;
}

public void setBase64Mode(int base64Mode) {
    this.base64Mode = base64Mode;
}

public String encrypt(String key, String data) {
    if (key == null || data == null)
        return null;
    try {
        Log.d("encrypt: ", "notnull");
        DESKeySpec desKeySpec = new DESKeySpec(key.getBytes(charsetName));
        Log.d("encrypt", "1");
        SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance(algorithm);
        Log.d("encrypt", "2");
        SecretKey secretKey = secretKeyFactory.generateSecret(desKeySpec);
        Log.d("encrypt", "3");
        byte[] dataBytes = data.getBytes(charsetName);
        Log.d("encrypt", "4");
        Cipher cipher = Cipher.getInstance(algorithm);
        Log.d("encrypt", "5");
        cipher.init(Cipher.ENCRYPT_MODE, secretKey);
        Log.d("encrypt", "6");
        return Base64.encodeToString(cipher.doFinal(dataBytes), base64Mode);
    } catch (Exception e) {
        return null;
    }
}

public String decrypt(String key, String data) {
    if (key == null || data == null)
        return null;
    try {
        byte[] dataBytes = Base64.decode(data, base64Mode);
        DESKeySpec desKeySpec = new DESKeySpec(key.getBytes(charsetName));
        SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance(algorithm);
        SecretKey secretKey = secretKeyFactory.generateSecret(desKeySpec);
        Cipher cipher = Cipher.getInstance(algorithm);
        cipher.init(Cipher.DECRYPT_MODE, secretKey);
        byte[] dataBytesDecrypted = (cipher.doFinal(dataBytes));
        return new String(dataBytesDecrypted);
    } catch (Exception e) {
        return null;
        }
    }
}
但当我运行它时,返回的值(来自“encrypt”)为null,除非我将charsetName更改为UTF16BE,这看起来很奇怪。我记录了所有的行,以查看错误发生的具体位置,似乎程序甚至没有通过“加密”的第一行,因此:

DESKeySpec desKeySpec = new DESKeySpec(key.getBytes(charsetName));
我在这里用错字符集了吗?当我使用UTF16BE时,我会得到如下结果:

��t��e��s��t

有人知道为什么吗?

你为什么默默地接受例外?如果您放弃并忽略异常,您将永远无法找出问题所在。@GregS当我调用e.printStackTrace()时;在catch异常中,它不打印任何内容,Log.e也不打印(“异常:”,“异常为:”,e);好的,不管我真的修复了它,你是对的,谢谢(:你的最小值和目标api是什么,你得到这个问题的api是什么?