我最近开始收到这样的Play商店警告:“您的应用包含不安全的密码加密模式”,为了摆脱它(不知道确切含义),我创建了一个“复杂”我的应用程序中有关加密的结构如下:
1)下一个方法(位于一种与密码学不同的类中,以防万一)将密码首选项存储在两个位置,即SharedPreferences中的“ real”值和应用程序类设置器中称为AppSettings(“的” default“值)。默认值”表示在找不到SharedPreference时必须获得的默认值。
public static void setCryptPreferences()
{
Context context = AppSettings.getContext();
AppSettings appSettings = AppSettings.getInstance();
String[] defCryptoValues = new String[]{ "AES", "AES/CBC/PKCS5Padding", "UTF-8"};
appSettings.setDefCryptValues(defCryptoValues);
AWUtils.setSharedPreference(context, "CRYPT_ALGORITHM", "AES");
AWUtils.setSharedPreference(context, "PADDING", "AES/CBC/PKCS5Padding");
AWUtils.setSharedPreference(context, "CHAR_ENCODING", "UTF-8");
}
然后在应用启动时使用此功能对其进行设置。
2)然后,每当需要加密时,便将其与下一个方法一起使用:
public static String cipherText(String plainText)
{
AppSettings appSettings = AppSettings.getInstance();
Cryptography crypto = new Cryptography();
String[] defCryptoValues = appSettings.getDefCryptValues();
String[] cryptoParams = Cryptography.getCryptoParams(defCryptoValues);
return crypto.encrypt(plainText, cryptoParams);
}
最后这是真正的crypt方法:
private String encrypt(String text, String[] cryptedParams)
{
checkKeys();
if (text == null) return null;
String retVal = null;
try {
final SecretKeySpec key = new SecretKeySpec(mCryptKey.getBytes(cryptedParams[2]), cryptedParams[0]);
final IvParameterSpec iv = new IvParameterSpec(mCryptIV.getBytes(cryptedParams[2]));
final Cipher cipher = Cipher.getInstance(cryptedParams[1]);
cipher.init(Cipher.ENCRYPT_MODE, key, iv);
final byte[] encrypted = cipher.doFinal(text.getBytes(cryptedParams[2]));
retVal = new String(encodeHex(encrypted));
} catch (Exception e) {
e.printStackTrace();
}
return retVal;
}
我对警告不太清楚,我以为我拥有加密参数
"CRYPT_ALGORITHM", "AES"
"PADDING", "AES/CBC/PKCS5Padding"
"CHAR_ENCODING", "UTF-8"
作为密码学类中的纯文本,因此我创建了所有关于“隐藏”它们的想法,并认为它可以帮助我摆脱它们,但事实并非如此。我最近上传了我的应用程序的新版本,但警告仍然存在,并且我不知道该怎么办。