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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
java/php对应的AES/CBC/PKCS5Padding模式 加密解密
目前一个系统(java开发的)上将加密的用户名和密码传递到另一个系统(PHP开发的),约定了java使用AES加密,php在获得加密的用户名和密码后,进行解密。
java加密之AES/CBC/PKCS5Padding
和上一篇原理一样,只是多一个偏移量 1.加密 public static String Encrypt(String sSrc, String sKey) throws Exception { if (sKey == null) { System.out.print("Key为空null"); return n...
JS 和 JAVA 实现 aes(AES/CBC/PKCS5Padding) 加密
AES 简介 密码学中的高级加密标准(Advanced Encryption Standard,AES),又称高级加密标准Rijndael加密法, 是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界 所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院 (NIST)于2001年11月26日 发布于FIPS PUB1...
C#, Java, PHP, Python和Javascript几种语言的AES加密解密实现【多种语言AES/CBC/PKCS5Padding通用加解密数据】
http://www.tuicool.com/articles/nERnqe http://www.cnblogs.com/AloneSword/p/3485912.html【这里有具体的对称和非对称算法的详细介绍】 c#里面的AES加密解密 在visual studio中写的c#代码 using System; using System.Collections.Gen
AES-256-CBC-PKCS5Padding用c语言实现,并支持Android手机的调用
AES-256-CBC-PKCS5Padding用c语言实现,并支持Android手机的调用
php AES/CBC/PKCS5Padding 与java对接
最近做了一个需求,要和第三方的系统对接,其中数据传输要用对方的要求进行aes加密,之前没接触过aes加密,后来研究了一把,蛋碎了一地,为了避免下次蛋碎,特总结一下: 下面是第三方给的java加密demo publicclassAESPlus { /**  * 加密  * @paramstrKey密匙  * @paramstrIn待价密串  * @return  * @throw
AES PKCS5Padding
实现原理如下: AES一般是16个字节为一块,然后对这一整块进行加密,如果输入的字符串不够16个字节,就需要补位, PKCS5Padding:填充的原则是,如果长度少于16个字节,需要补满16个字节,补(16-len)个(16-len)例如: huguozhen这个节符串是9个字节,16-9= 7,补满后如:huguozhen+7个十进制的7 如果字符串长度正好是16字节,
AES/CBC/PKCS5Padding加解密
aes/cbc/pkcs5padding/128加解密示例:<?php class AesEncrypt{ //自定义key protected $key; //cipher算法类型 protected $cipher = 'rijndael-128'; //mode模型 protected $mode = 'cbc'; public fu
AES128CBC_PKCS5Padding加密
我写的一个分类,关于aes128CBC加密的。    1.使用方式:   #import "NSString+AES128.h"      key 和 iv 必须为16位。     key : 公钥    iv : 偏移量    iv要和服务器加密时,商量好。      加密:     NSString *aesPassword2 = [NSString AES128CBC_PKC
AES/CBC/PKCS5Padding/ 加解密
本文使用开运库cryptopp,实现AES/CBC/PKCS5Padding/ 的加解密,希望能帮助到有需要的人