Aes加密与加密【JAVA】

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;
        }
    }
}



*交流分享,杜绝私藏。崇尚开源


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值