跨JAVA,IOS平台的AES加密解密算法

我们项目的需求是IOS前台进行数据加密,java后台进行数据解密,采用对称加密算法。权衡利弊后选用AES加密算法。在实现的过程中发现IOS加密的数据java端解密不了,翻阅资料发现是IOS端ASE的填充算法采用PKCS7Padding,而我在java端采用的填充算法是PKCS5Padding或者NONE,继续查阅资料终于找到JAVA端可用的基于PACS7Padding的加解密算法,自己改造了一下发布如下:

package com.ys.dk.common.util;

import java.security.Security;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import org.bouncycastle.util.encoders.Base64;

public class AESUtil {
/**
* 密钥算法 java6支持56位密钥,bouncycastle支持64位
* */
public static final String KEY_ALGORITHM = "AES";
public static final String CIPHER_ALGORITHM = "AES/ECB/PKCS7Padding";
//key长度为[128bit(16byte),192bit(24byte),256bit(32byte)]中的一个
public static final String KEY = "1234567890123456";
public static final SecretKey secretKey = new SecretKeySpec(KEY.getBytes(), KEY_ALGORITHM);
static {
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
}

/**
* 加密数据
* @param str
* @return String 加密后的数据
* */
public static String encrypt(String str) throws Exception {
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
// 初始化,设置为加密模式
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
// 执行操作
byte[] data = cipher.doFinal(str.getBytes());
data = Base64.encode(data);
return new String(data,"UTF-8");
}

/**
* 解密数据
*
* @param str
* @return String 解密后的数据
* */
public static String decrypt(String str) throws Exception {
byte[] data = Base64.decode(str);
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
// 初始化,设置为解密模式
cipher.init(Cipher.DECRYPT_MODE, secretKey);
// 执行操作
return new String(cipher.doFinal(data),"UTF-8");
}

public static void main(String[] args) throws Exception {
String str = "你好";
System.out.println("原始串:"+str);
String enc = AESUtil.encrypt(str);
// enc= "llQCl2Zii01ora9J3PJxNA==";
System.out.println("加密后:"+enc);
String dec = AESUtil.decrypt(enc);
System.out.println("解密后:"+dec);
}


}


注意两点:
1, 加解密用到了bouncycastle的jar,附件里面有下载
2,用附件中的local_policy.jar,US_export_policy.jar覆盖JDK安装路径的\jre\lib\security(例如我的目录结构为C:\Program Files\Java\jdk1.6.0_43\jre\lib\security,别弄错目录了)目录下的两个jar
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值