跨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

你可能感兴趣的:(java)