目前我们将我们的字符串加密为:
import android.util.Base64;
import java.security.Key;
import java.util.Arrays;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
public class Cipher {
private static final String TEXT_ENCODING_TYPE = "UTF-8";
private static final String ALGO = "AES";
private static final String TYPE = ALGO + "/CBC/PKCS5Padding";
private static final String KEY = "MY_STATIC_KEY";
private static final String IV = "MY_STATIC_VECTOR";
private static final String IV_PADDING = " ";
public static String encrypt(String data) {
try {
if (!data.isEmpty()) {
javax.crypto.Cipher cipher = javax.crypto.Cipher.getInstance(TYPE);
cipher.init(javax.crypto.Cipher.ENCRYPT_MODE, getKey(), getIV());
return Base64.encodeToString(cipher.doFinal((IV_PADDING + data).getBytes()), Base64.NO_WRAP).trim();
} else {
return data;
}
} catch (Exception e) {
return data;
}
}
return new String(cipher.doFinal(data)).trim();
} else {
return encryptedData;
}
} catch (Exception e) {
LogUtils.log(e, Cipher.class);
return encryptedData;
}
}
private static Key getKey() throws Exception {
return new SecretKeySpec(KEY.getBytes(TEXT_ENCODING_TYPE), ALGO);
}
private static IvParameterSpec getIV() throws Exception {
return new IvParameterSpec(IV.getBytes(TEXT_ENCODING_TYPE));
}
private static IvParameterSpec getIV(byte[] iv) {
return new IvParameterSpec(iv);
}
}
但是我们收到了来自 Google Play 管理中心的安全警报:
您的应用包含不安全的密码加密模式。
然后我们被重定向到这个链接:Remediation for Unsafe Cryptographic Encryption。但是,此链接建议使用Jetpack Security包,其中我找不到如何加密字符串并为我们的每个服务器请求生成安全的KEY 和 IV。
我访问过的所有示例和链接都指向将您的敏感数据保存到加密文件和 SharedPreferences。
那么,我现在该怎么办?我是否必须找到也可以在服务器端(Java)解码的安全密钥生成机制并将该密钥保存在 Secured SharedPreferences 中?Jetpack Security 软件包仍处于 Beta 模式。
打开以获得更多说明。