2 l1334388165 l1334388165 于 2016.01.31 18:25 提问

aes/cbc/pkcs5padding 加密在android4.4版本以下出错 20C

以下加密在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;

}

2个回答

devmiao
devmiao   Ds   Rxr 2016.01.31 22:49
l1334388165
l1334388165 感谢回答。我最终解决的问题是讲SecretKey转化成SecretKeySpec解决了不同android版本的问题,如下:
接近 2 年之前 回复
l1334388165
l1334388165 感谢回答。我最终解决的问题是讲SecretKey转化成SecretKeySpec解决了不同android版本的问题,如下:
接近 2 年之前 回复
l1334388165
l1334388165   2016.02.01 10:57

@苏小喵 上面回复格式不对了,这边我说一下我的解决方案。我最终是把SecretKey转化成SecretKeySpec,如下:

SecretKey tmp =keyFactory.generateSecret(keySpec);
SecretKey key=new SecretKeySpec(tmp.getEncoded(),"AES");

但是我的疑问是,我改变如上的"AES"为"DES"时,最终结果并没有变化,希望有人能告诉我,谢谢。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!