问题描述
- aes/cbc/pkcs5padding 加密在android4.4版本以下出错
-
以下加密在android4.4版本上运行正常,但是在低于4.4版本上的设备,每次结果不一样。希望有人能帮我解决这个问题,谢谢!
public String encryptPass(){String username="stackoverflow"; String password="stackoverflow"; String salt="stackoverflow145"; PBEKeySpec keySpec=new PBEKeySpec(username.toCharArray(),salt.getBytes(),1000,256); SecretKeyFactory keyFactory=SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1"); SecretKey key=keyFactory.generateSecret(keySpec);
/*初始向量:16位长度*/
byte[] iv={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
IvParameterSpec ivSpec=new IvParameterSpec(iv);Cipher cipher=Cipher.getInstance("AES/CBC/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE,key,ivSpec); byte[] passBytes=cipher.doFinal(password.getBytes()); String result=Base64.encodeToString(passBytes,Base64.NO_WRAP); return result;
}
解决方案
http://blog.csdn.net/zjclugger/article/details/34838447
解决方案二:
@苏小喵 上面回复格式不对了,这边我说一下我的解决方案。我最终是把SecretKey转化成SecretKeySpec,如下:
SecretKey tmp =keyFactory.generateSecret(keySpec);
SecretKey key=new SecretKeySpec(tmp.getEncoded(),"AES");
但是我的疑问是,我改变如上的"AES"为"DES"时,最终结果并没有变化,希望有人能告诉我,谢谢。
时间: 2024-08-17 11:44:26