在我的Android應用程序中,我想使用DESede/CBC/PKCS5Padding加密密碼,我的解決方案來自Lollipop(5.x),Android KitKat(4.4。 X)和Android果凍豆(版本4.3.x)使用PBKDF2WithHmacSHA1和DESede/CBC/PKCS5Padding for Android 4.2及更早版本
private static final String KEY = "a2[..]";
private static final String SALT = "t[..]";
private static final String IV = "u[..]";
private static final String DES_EDE_PKCS5 = "DESede/CBC/PKCS5Padding"
public static String encrypt(String password) {
byte[] byteSalt = Base64.decode(SALT, Base64.DEFAULT);
byte[] bytesIv = Base64.decode(IV, Base64.DEFAULT);
String mdp = "";
try {
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
KeySpec spec = new PBEKeySpec(KEY.toCharArray(), byteSalt, NB_ITER_RFC, SIZE_KEY);
SecretKey secretKey = factory.generateSecret(spec);
Cipher c = Cipher.getInstance(DES_EDE_PKCS5);
IvParameterSpec ivParam = new IvParameterSpec(bytesIv);
c.init(Cipher.ENCRYPT_MODE, secretKey, ivParam);
byte[] encrypted = c.doFinal(password.getBytes("UTF-8"));
mdp = Base64.encodeToString(encrypted, Base64.DEFAULT);
}
catch [..]
return mdp;
}
但它是行不通以下版本(4.2.x版及以下),這種加密的密碼似乎對於爲例隨意改變:
D/andro-Chiffrement-encrypt(10739): password chiffré = P7vWc+7hFuUaWQghVeO+zA==
D/andro-Chiffrement-encrypt(10739): password chiffré = jGr6nlvnYLd/AK/d7nkUrA==
D/andro-Chiffrement-encrypt(10739): password chiffré = I2weyEddIav7EulAiuQDbg==
D/andro-Chiffrement-encrypt(10739): password chiffré = HF7OFpUXYuwOm81WekReDg==
特別是如何解決Android 4.2.x的這個問題?
我發現有了圖書館Bouncy Castle,但我沒有找到如何實現'IV'(Generator Vector)。你有好主意嗎 ?
PKCS5S2ParametersGenerator gen = new PKCS5S2ParametersGenerator();
gen.init(PBEParametersGenerator.PKCS12PasswordToBytes(passCharArray), byteSalt, NB_ITER_RFC);
KeyParameter params = (KeyParameter) gen.generateDerivedParameters(SIZE_KEY);
String password2 = Base64.encodeToString(params.getKey(), Base64.DEFAULT);
謝謝你的幫助。最後,我的解決方案適用於Android 4.3.x,但不適用於Android 4.2.x及更低版本。我糾正了我的帖子。這個解決方案對我不起作用,這真的很奇怪......: - / – bzhWarrior 2015-02-06 10:32:26