使用PKCS 7红米加密失败解决方法问题,怎么解决

【图文】项目7 网络安全管理_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
项目7 网络安全管理
上传于|0|0|文档简介
&&项目7 网络安全管理
大小:1.05MB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢1003人阅读
在java中用aes256进行加密,但是发现java里面不能使用PKCS7Padding,而java中自带的是PKCS5Padding填充,那解决办法是,通过BouncyCastle组件来让java里面支持PKCS7Padding填充。
説辣么多不如上代码:
public class AESUtil {
* Encodes a String in AES-256 with a given key
* @param context
* @param password
* @param text
* @return String Base64 and AES encoded String
public static String encode(String keyString, String stringToEncode) throws NullPointerException {
if (keyString.length() == 0 || keyString == null) {
throw new NullPointerException(&Please give Password&);
if (stringToEncode.length() == 0 || stringToEncode == null) {
throw new NullPointerException(&Please give text&);
SecretKeySpec skeySpec = getKey(keyString);
byte[] clearText = stringToEncode.getBytes(&UTF8&);
// IMPORTANT TO GET SAME RESULTS ON iOS and ANDROID
final byte[] iv = new byte[16];
Arrays.fill(iv, (byte) 0x00);
IvParameterSpec ivParameterSpec = new IvParameterSpec(iv);
* 这个地方调用BouncyCastleProvider
*让java支持PKCS7Padding
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
// Cipher is not thread safe
Cipher cipher = Cipher.getInstance(&AES/CBC/PKCS7Padding&);
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, ivParameterSpec);
String encrypedValue = Base64.encodeToString(cipher.doFinal(clearText), Base64.DEFAULT);
// Log.d(&jacek&, &Encrypted: & + stringToEncode + & -& & + encrypedValue);
return encrypedV
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (InvalidAlgorithmParameterException e) {
e.printStackTrace();
return &&;
* Decodes a String using AES-256 and Base64
* @param context
* @param password
* @param text
* @return desoded String
public static String decode(String password, String text) throws NullPointerException {
if (password.length() == 0 || password == null) {
throw new NullPointerException(&Please give Password&);
if (text.length() == 0 || text == null) {
throw new NullPointerException(&Please give text&);
SecretKey key = getKey(password);
// IMPORTANT TO GET SAME RESULTS ON iOS and ANDROID
final byte[] iv = new byte[16];
Arrays.fill(iv, (byte) 0x00);
IvParameterSpec ivParameterSpec = new IvParameterSpec(iv);
byte[] encrypedPwdBytes = Base64.decode(text, Base64.DEFAULT);
// cipher is not thread safe
* 这个地方调用BouncyCastleProvider
*让java支持PKCS7Padding
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
Cipher cipher = Cipher.getInstance(&AES/CBC/PKCS7Padding&);
cipher.init(Cipher.DECRYPT_MODE, key, ivParameterSpec);
byte[] decrypedValueBytes = (cipher.doFinal(encrypedPwdBytes));
String decrypedValue = new String(decrypedValueBytes);
//Log.d(LOG_TAG, &Decrypted: & + text + & -& & + decrypedValue);
return decrypedV
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (InvalidAlgorithmParameterException e) {
e.printStackTrace();
return &&;
* Generates a SecretKeySpec for given password
* @param password
* @return SecretKeySpec
* @throws UnsupportedEncodingException
private static SecretKeySpec getKey(String password) throws UnsupportedEncodingException {
// You can change it to 128 if you wish
int keyLength = 256;
byte[] keyBytes = new byte[keyLength / 8];
// explicitly fill with zeros
Arrays.fill(keyBytes, (byte) 0x0);
// if password is shorter then key length, it will be zero-padded
// to key length
byte[] passwordBytes = password.getBytes(&UTF-8&);
int length = passwordBytes.length & keyBytes.length ? passwordBytes.length : keyBytes.
System.arraycopy(passwordBytes, 0, keyBytes, 0, length);
SecretKeySpec key = new SecretKeySpec(keyBytes, &AES&);
public static void main(String args[])
long startTime = System.currentTimeMillis();
String encodeStr = AESUtil.encode(&1234&, &你要去哪儿test123&);
System.out.println(&encoder:&+encodeStr);
String decodeStr = AESUtil.decode(&1234&,encodeStr);
System.out.println(&decoder:&+decodeStr);
输出的结果是:
Java 中仅支持 128 位密钥,当使用 256 位密钥的时候,会报告密钥长度错误&你需要下载一个支持更长密钥的包。这个包叫做
Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 8
,可以从这里下载,下载地址:。下好了zip文件以后,把里面的两个jar包(local_policy.jar,US_export_policy.jar)替换掉jdk的security文件夹中相应的jar包就OK啦。
但是我确实遇到一个比较奇怪的问题,我在android上面调用PKCS7Padding 是没有问题的,但是在java写的服务端就有问题了。不知道为什么,我用的jdk都是1.8.0的jdk。还请各位如果有遇到相同情况的可以解答一下。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:9868次
排名:千里之外
(1)(4)(2)(1)&&国之画&&&& &&&&&&
&& &&&&&&&&&&&&&&
鲁ICP备号-4
打开技术之扣,分享程序人生!匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。关于加密文件夹的问题_windows7吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:444,926贴子:
关于加密文件夹的问题收藏
我机械盘里的文件夹,加密了。然后电脑加了固态硬盘,重做了系统,就把机械盘里的加密文件夹直接用disk genius这个软件拷了出来,现在打不开了(不是文件夹打不开,是文件夹里的文件)请问有什么方法打开加密的文件吗?现在拷出来的文件夹也没有加密文件夹的符号了。但文件夹里有个配置文件。如图求知道的大神帮帮忙,谢谢了。
2017新版Ghost Win7旗舰版系统,windows7,稳定可靠,装机必备之选.本站系统下载速度快,免激活,万能驱动兼容笔记本,新老台式机,是电脑装机的好系统.
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或}

我要回帖

更多关于 erlang rsa加密 pkcs8 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信