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个回答

l1334388165
l1334388165 感谢回答。我最终解决的问题是讲SecretKey转化成SecretKeySpec解决了不同android版本的问题,如下:
3 年多之前 回复
l1334388165
l1334388165 感谢回答。我最终解决的问题是讲SecretKey转化成SecretKeySpec解决了不同android版本的问题,如下:
3 年多之前 回复

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

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

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

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
AES/CBC/PKCS5Padding/ 加解密
本文使用开运库cryptopp,实现AES/CBC/PKCS5Padding/ 的加解密,希望能帮助到有需要的人
AES/CBC/PKCS5PADDING/128加密解密
这是一个Android开发中的文本加密解密工具类,使用AES128对称加密算法,该资源是一个AndroidStudio3.1版本写的工程,其中包含一个工具类和一个调试活动界面,可解压后直接运行。这个是我为公司项目写的与服务器端同步加密解密的工具类,所以秘钥和iv值是和服务器端商量好的,秘钥和iv值都封装在工具类中。
AES/CBC/PKCS5Padding 对称算法加解密
package com.haiyisoft.evportal.token.action; import java.security.InvalidAlgorithmParameterException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import j
AES/CBC/PKCS5Padding java与php加密类互通(亲测可用)
java类: package common; import java.io.UnsupportedEncodingException; import java.security.InvalidAlgorithmParameterException; import java.security.InvalidKeyException; import java.security.NoSuchAlgori...
AES CBC加密
实现AES CBC加密 内含分析文档
AES CBC加密/解密
简介 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的...
AES加密 CBC模式
AES加密,有EBC和|CBC、CFB等多种加密模式,EBC较简单安全性低,这里写了一个本地 CBC模式的AES加密。
c++ AES 兼容 JAVA AES CBC PKCS5Padding C#
公司有用C#写的AES代码 又有用JAVA AES CBC PKCS5Padding 加密的 但对于由JAVA AES CBC PKCS5Padding 加密的数据C++解密的资料极为稀缺 故本人找到了一些资源 同时改写了一些填充方式 使得与JAVA C#兼容 VS2010 测试通过 JAVA的在这里http: blog csdn net wfung kwok article details 7766427 需要大家注意的是C++加密的秘钥和IV 向量是我自己设置的 大家可以自己修改 以兼容JAVA C# ">公司有用C#写的AES代码 又有用JAVA AES CBC PKCS5Padding 加密的 但对于由JAVA AES CBC PKCS5Padding 加密的数据C++解密的资料极为稀缺 故本人找到了一些资源 同时改写了一些填充方式 使得与JAVA C#兼容 VS2010 测试通过 JAVA的在这里h [更多]
java/javascript/iOS的AES加解密(AES/CBC/PKCS5Padding)
AES/CBC/PKCS5Padding,加密解决 支持javascript、java、iOS
AES CBC模式加密/解密
密钥: /** * AES密钥 */ private final String m_sKey = ""; /** * AES 加密向量 */ private final String m_sIV = ""; 以下: /** * * * @param src 待加密的byte[]
aes 256 cbc 加密jar
aes 256 cbc 加密jar KeyGenerator 不支持 int(256)时, 下载jar包, 有1.6和1.7的 替换到\jreX\lib\security下的: local_policy.jar和US_export_policy.jar
C++ AES之CBC加密模式
//Rijndael.h #ifndef __RIJNDAEL_H__ #define __RIJNDAEL_H__ #include #include #include #define BLOCK_SIZE 16 using namespace std; class CRijndael { public: //Operation Modes //The Electronic Cod
AES加密128bit、CBC模式
给NSData添加一个分类,.h文件 .m文件
VS2013运行的AES加密(CBC)
我之前上传了一个Linux版本的,这次上传一个Windows版。
AES加密CBC模式DLL
delphi调用原型: Function AESCBC(kb:integer;resStr:PChar;inKey:PChar;initVector:PChar;error:Pchar):PChar; cdecl; external 'AES.dll'; kb:128,192,256, resStr:源字符串 inKey:密匙 initVector:初始向量 返回值为base64编码串
关于openssl AES/ECB/PKCS5Padding加密 求助
各位高手们,小弟最近需要做一个用AES/ECB/PKCS5Padding加密的代码,跑在嵌入式linux平台上,平台已经移植了openssl,我写了下面一个基于openssl的AES/ECB/PKCS5Padding加密函数,但最终加密后的结果不对,请各位帮忙看下哪的问题,谢谢各位高手了rnrn[code=c]rn#include "openssl/aes.h"rnrn#define AES_DEBUGrnrnint ez_AES_ecb_encrypt_PKCS5Padding(const char *in, char *out, const unsigned char *key, const int keybits)rn AES_KEY aes;rn unsigned char *input_string;rn unsigned char *encrypt_string;rn unsigned int surplus_len;rn char b, *tmp_out;rn const char *tmp_in;rn int encrypt_quit = 0;rn if(in == NULL || out == NULL)rn#ifdef AES_DEBUGrn printf("[%s] [%d] \"in\" or \"out\" point error!!\n", __FILE__, __LINE__);rn#endifrn rn input_string = (unsigned char*)calloc(AES_BLOCK_SIZE, sizeof(unsigned char));rn if (input_string == NULL) rn fprintf(stderr, "Unable to allocate memory for input_string\n");rn exit(-1);rn rn rn encrypt_string = (unsigned char*)calloc(AES_BLOCK_SIZE, sizeof(unsigned char));rn if (encrypt_string == NULL) rn fprintf(stderr, "Unable to allocate memory for encrypt_string\n");rn return -1;rn rn memset(encrypt_string, 0, AES_BLOCK_SIZE);rn // set encrypt keyrn if (AES_set_encrypt_key(key, keybits, &aes) < 0) rn fprintf(stderr, "Unable to set encryption key in AES\n");rn return -1;rn rn tmp_in = in;rn tmp_out = out;rn while(!encrypt_quit)rn if(strlen(tmp_in) == 0)rn surplus_len = AES_BLOCK_SIZE;rn b = '\0'+surplus_len;rn memset(input_string, b, AES_BLOCK_SIZE);rn encrypt_quit = 1;rn else if(strlen(tmp_in)/AES_BLOCK_SIZE > 0)rn memcpy(input_string, tmp_in, AES_BLOCK_SIZE);rn elsern surplus_len = strlen(tmp_in)%AES_BLOCK_SIZE;rn b = '\0'+surplus_len;rn memset(input_string, b, AES_BLOCK_SIZE);rn memcpy(input_string, tmp_in, strlen(tmp_in));rn encrypt_quit = 1;rn rn#ifdef AES_DEBUGrn printf("input_string: %s\n", input_string);rn#endifrn memset(encrypt_string, 0, AES_BLOCK_SIZE);rn AES_ecb_encrypt(input_string, encrypt_string, &aes, AES_ENCRYPT);rn#ifdef AES_DEBUGrn printf("encrypt_string: %s\n", encrypt_string);rn#endifrn memcpy(tmp_out, encrypt_string, AES_BLOCK_SIZE);rn tmp_out += AES_BLOCK_SIZE;rn tmp_in += AES_BLOCK_SIZE;rn rn free(input_string);rn free(encrypt_string);rn return 0;rnrnrn[/code]
java des(DES/CBC/PKCS5Padding) 加密,对应的C openssl 加密
java des(DES/CBC/PKCS5Padding) 加密,对应的C openssl 加密的函数是DES_cbc_encrypt吗?两个加密的结果不一样呢
AES/ECB/PKCS5PADDING
最近需要和银行pos做数据通讯,银行端算法为java实现的 AES/ECB/PKCS5PADDING我也改不了, c/c++这边实现ECB算法本来就少,PKCS5PADDING的更是没有,索性自己动手。工作原因c和java都得熟悉,因此把java端和c/c++实现都给大家了,注意java端要明确指明字符集为GBK,因为各版本jdk默认字符集并不一致,key采用16位,你知道的。压缩包里有两个工程,一个vc6.0一个myeclipse,都拿去吧,希望对大家有用,本来想白送的,可惜楼主我没分了,问大家讨1分,望多包涵
C语言实现 AES/CBC 128位,PKCS5Padding填充方式
各位大神,有咩有C语言实习 AES/CBC 128位,PKCS5Padding填充方式的源码??? 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdow...
AES/ECB/PKCS5Padding 算法
AES/ECB/PKCS5Padding 算法,用于数据加密,实现方式为Java。AES加密算法是密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准
AES PKCS5Padding填充方式
求用C++ 或者 C 或者 VC实现的可以加解密使用PKCS5Padding填充方式的AES源码,在线急求!不胜感激!
Delphi10.2 DES/CBC/PKCS5Padding/UTF-8
根据原"与JAVA的关于DES/CBC/PKCS5Padding 互相解密" 代码修改,解决中文乱码问题。与在线加密网站结果一致
QT下AES CBC加密例子程序
QT下AES CBC加解密程序,经过测试可以成功加解密,只需简单的调用里面的函数即可。
Linux下使用openssl的AES加密-CBC模式
最近需要用到AES加密,为了图方便就打算使用openssl自带的AES加密算法的API来实现。 主要用到了ECB和CBC两种加密模式。 ECB模式之前一篇已经写过了。这篇就写一下CBC模式。
AES 加密工具(ECB,CBC,CMAC)
AES工具,支持ECB,CBC加解密运算,以及CMAC运算。支持多种PADDING
php aes 128 CBC加密、解密函数
/* * $data 加密的内容,$key 密钥 */ function cbc_encrypt($data ,$key ) {     $iv = $key;     $padding = 16 - (strlen($data) % 16);     $data .= str_repeat(chr($padding), $padding);     $encrypted = mcr
AES加密 java&c++版本
AES加密 java&c++版本C++版本AES.h:#ifndef __AES_H__ #define __AES_H__ #include <string.h> class AES { public: AES(unsigned char* key); virtual ~AES(); //加密整段文字 void Bm53Cipher(char *input,char
通用AES加密版本
Object-c、C#、Java、Android都通用的版本,通用AES加密版本
AES加密128位(16字节)CBC
c# AES加密128位(16字节)CBC模式 NOPadding 网上代码好少16进制的所有贡献给大家
AES /DES 加密使用 CBC/ECB 工作模式
算法/工作模式、填充模式 AES  DES 是加密算法 CBC  ECB 是工作模式 后面的是 填充模式 加密的工作模式有 ECB、CBC、CFB、OFB 其中:CBC  和 ECB 比较常用 ECB   电子密码本模式:Electronic codebook  每块堵路加密  优点:分块处理 并行处理 缺点:同样的原文得到相同的密文  容易被攻击
使用cryptography进行AES的cbc模式加密
cryptography 是一个python加密库 cryptography is a package designed to expose cryptographic primitives and recipes to Python developers. 文档 cryptography.io 以前使用过很多不同的加密库,但pyhton界貌似没有一个统一的库。 但需要用到RSA
求AES CBC模式加密的例子
哪位朋友有这方面的例子请发我邮箱:rnxiaoc1026@163.comrn谢谢,分不够再加。
Javascript使用AES加密(CBC模式)
 1、前段加密: &amp;lt;html&amp;gt; &amp;lt;head&amp;gt; &amp;lt;script src = &quot;aes.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt; &amp;lt;script&amp;gt; //(需要先加载aes.min.js文件) // 建议此文件需要混淆源代码 // AES 秘钥 var AesKey = &quot;Test-AES-CBC-128&quot;; // AES-128-C
aes加密与des加密(包括三重des加密与cbc工作模式)
aes加密与des加密(包括三重des加密与cbc工作模式)
java des加密 DES/CBC/PKCS5Padding 与php 解密
目前我要测试一个php写的接口,文档中提供:rnDES加密解密工作模式、填充方式约定:rn 工作模式:CBCrn 填充方式:PKCS7rnjava中只有pkcs5,因此我才用DES/CBC/PKCS5Padding这个方式进行加密,采用对方提供的key和iv,但是加密后,对方解密返回:数据解码失败。rn请问这最可能是由于什么原因造成?rn[code=java]rn// 加密数据rn public static String encrypt(String message, String key, String ivStr)rn throws Exception rn rn Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");rn DESKeySpec desKeySpec = new DESKeySpec(key.getBytes());rn SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");rn SecretKey secretKey = keyFactory.generateSecret(desKeySpec);rn IvParameterSpec iv = new IvParameterSpec(ivStr.getBytes());rn cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv); rn byte[] byteMi = cipher.doFinal(message.getBytes()); rn return new String(byteMi);rn rn rn[/code]
Python AES和Java AES/ECB/PKCS5Padding互转
轻松实现 Python AES和Java AES/ECB/PKCS5Padding互转
AES/ECB/PKCS5Padding C++实现
AES/ECB/PKCS5Padding C++实现
AES加密AES加密
AES加密 C++开发,封装类,可直接使用
AES CBC加解密源代码
本资源是基于VC6.0编写的源代码,其中AesCBC.h和AesCBC.cpp文件实现了AES CBC模式128位、192位和256位加解密算法,并附有相关接口使用的实例测试代码。
AES加密解密(CBC模式)
高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有
相关热词 c# 线程结束时执行 c# kb mb 图片 c# 替换第几位字符 c#项目决定成败 c# 与matlab c# xml缩进 c#传感器基础 c#操作wps c# md5使用方法 c# 引用父窗口的组件