6
我從http://www.ravenblast.com/index.php/blog/android-password-text-encryption/得到了這段代碼,儘管它有效,但我越來越懷疑它不夠安全。根據其他來源,似乎沒有任何初始化向量。這種AES加密是否足夠安全?
public static String encrypt(String toEncrypt, byte[ ] key) throws Exception {
SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
byte[ ] encryptedBytes = cipher.doFinal(toEncrypt.getBytes());
String encrypted = Base64.encodeBytes(encryptedBytes);
return encrypted;
}
public static String decrypt(String encryptedText, byte[ ] key) throws Exception {
SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, skeySpec);
byte[] toDecrypt = Base64.decode(encryptedText);
byte[] encrypted = cipher.doFinal(toDecrypt);
return new String(encrypted);
}
你需要一個IV和MAC。在面對主動攻擊者時,在加密 - 然後MAC方案中使用MAC或使用專門的身份驗證加密非常重要。否則攻擊者可能會誘騙你爲他解密一條消息。填充神諭是一種實際的攻擊。如果這是歐洲央行(我對API的瞭解不夠熟悉),您還需要切換到更好的模式。 – CodesInChaos 2013-02-18 13:46:23
使用'getBytes()'也不好,因爲它使用平臺/文化相關的編碼。改用UTF-8。 – CodesInChaos 2013-02-18 13:47:29