package com.*.*.web.utils;
import ocx.Rijndael;
import org.apache.xmlbeans.impl.util.Base64;
public class AesUntil {
/**
* 加密
* @param transferKey
* @param data
* @return
*/
public static String getCipher(String transferKey, String data)
{
String saltKey = "a7fc844d17f43955783d7d6f5df7eb4e";
try
{
Base64 base64 = new Base64();
if (data.contains(" ")) {
data = data.replaceAll(" ", "+");
}
byte[] cypherArray = data.getBytes();
Rijndael aes256 = new Rijndael();
aes256.makeKey("a7fc844d17f43955783d7d6f5df7eb4e".getBytes(), "a7fc844d17f43955783d7d6f5df7eb4e".length() * 8);
byte[] tmp = aes256.decryptArrayNP(transferKey.getBytes(), 0);
byte[] realKey = new byte[32];
System.arraycopy(base64.encode(tmp), 0, realKey, 0, 32);
aes256.makeKey(realKey, realKey.length * 8);
byte[] plainArray = aes256.encryptArrayNP(cypherArray, 0);
String plainText = new String(base64.encode(plainArray)).trim();
return plainText;
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
/**
* 解密
* @param transferKey
* @param data
* @return
*/
public static String getResultStr(String transferKey, String data)
{
String saltKey = "a7fc844d17f43955783d7d6f5df7eb4e";
try
{
Base64 base64 = new Base64();
if (data.contains(" ")) {
data = data.replaceAll(" ", "+");
}
byte[] cypherArray = base64.decode(data.getBytes());
Rijndael aes256 = new Rijndael();
aes256.makeKey("a7fc844d17f43955783d7d6f5df7eb4e".getBytes(), "a7fc844d17f43955783d7d6f5df7eb4e".length() * 8);
byte[] tmp = aes256.decryptArrayNP(transferKey.getBytes(), 0);
byte[] realKey = new byte[32];
System.arraycopy(base64.encode(tmp), 0, realKey, 0, 32);
aes256.makeKey(realKey, realKey.length * 8);
byte[] plainArray = aes256.decryptArrayNP(cypherArray, 0);
String plainText = new String(plainArray).trim();
return plainText;
}
catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
public static void main(String[] args) {
String key = "11111111111111111111111111111111";
String pwd = "1234qwer";
String pwdM = getCipher(key, pwd);
System.out.println("加密后密串为:"+pwdM);
System.out.println("解密后明文为:"+getResultStr(key, pwdM));
}
}
AES加解密2
package com.lz.cif.individual.common.util;
import java.security.InvalidKeyException;
import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
/**
* User: dpj
* Date: 13-10-17
* Time: 下午3:19
*/
public class AesEncrypt {
public final static String UTF_8="UTF-8";
/**
* AES 加密
*
* @param sSrc 加密内容 必填 ( 必须为UTF_8)
* @param sKey 密钥 必填
* @return 成功或失败或异常信息
*/
public static String encrypt(String sSrc, String sKey) throws Exception {
if (sKey == null) {
return null;
}
byte[] seed = sKey.getBytes("ASCII");
SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
// 设置一个种子,一般是用户设定的密码
sr.setSeed(seed);
// 获得一个key生成器(AES加密模式)
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
// 设置密匙长度256位
keyGen.init(256, sr);
// 获得密匙
SecretKey key = keyGen.generateKey();
// 返回密匙的byte数组供加解密使用
byte[] raw = key.getEncoded();
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");//"算法/模式/补码方式"
IvParameterSpec iv = new IvParameterSpec("Xadiapdfaxi0s91D".getBytes());//使用CBC模式,需要一个向量iv,可增加加密算法的强度
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
byte[] encrypted = cipher.doFinal(sSrc.getBytes(UTF_8));
return Base64.encodeBase64String(encrypted);//此处使用BASE64做转码功能,同时能起到2次加密的作用。
}
/**
* AES 解密
*
* @param sSrc 解密密文 必填(HEX字符串)
* @param sKey 密钥 必填
* @return 解密明文 ( 为UTF_8编码集)
*/
public static String decrypt(String sSrc, String sKey) throws Exception {
try {
// 判断Key是否正确
if (sKey == null) {
return null;
}
byte[] seed = sKey.getBytes("ASCII");
SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
// 设置一个种子,一般是用户设定的密码
sr.setSeed(seed);
// 获得一个key生成器(AES加密模式)
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
// 设置密匙长度256位
keyGen.init(256, sr);
// 获得密匙
SecretKey key = keyGen.generateKey();
// 返回密匙的byte数组供加解密使用
byte[] raw = key.getEncoded();
//byte[] raw = sKey.getBytes("ASCII");
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
IvParameterSpec iv = new IvParameterSpec("Xadiapdfaxi0s91D"
.getBytes());
cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
byte[] encrypted1 = new Base64().decode(sSrc);//先用base64解密
try {
byte[] original = cipher.doFinal(encrypted1);
return new String(original,UTF_8);
} catch (Exception e) {
return null;
}
} catch (Exception ex) {
return null;
}
}
}
*交流分享,杜绝私藏。崇尚开源