AES加密(有后台给的秘钥):工具类:
类名:AESUtils
package com.example.administrator.myapp_frity.utlister;
//Java利用 AES/ECB/PKCS5Padding 算法加解密。
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import Decoder.BASE64Decoder;
import Decoder.BASE64Encoder;
/**
* AES加解密
*
* Created by yyh on 2015/10/9.
*/
public class AESUtils {
/**
* 密钥算法
*/
private static final StringALGORITHM ="AES";
/**
* 加解密算法/工作模式/填充方式
*/
private static final StringALGORITHM_STR ="AES/ECB/PKCS5Padding";
/**
* SecretKeySpec类是KeySpec接口的实现类,用于构建秘密密钥规范
*/
private SecretKeySpeckey;
public AESUtils(String hexKey) {
key =new SecretKeySpec(hexKey.getBytes(),ALGORITHM);
}
/**
* AES加密
* @param data
* @return
* @throws Exception
*/
public String encryptData(String data)throws Exception {
Cipher cipher = Cipher.getInstance(ALGORITHM_STR);// 创建密码器
cipher.init(Cipher.ENCRYPT_MODE,key);// 初始化
return new BASE64Encoder().encode(cipher.doFinal(data.getBytes()));
}
/**
* AES解密
* @param base64Data
* @return
* @throws Exception
*/
public String decryptData(String base64Data)throws Exception{
Cipher cipher = Cipher.getInstance(ALGORITHM_STR);
cipher.init(Cipher.DECRYPT_MODE,key);
return new String(cipher.doFinal(new BASE64Decoder().decodeBuffer(base64Data)));
}
/**
* hex字符串 转 byte数组
* @param s
* @return
*/
private static byte[] hex2byte(String s) {
if (s.length() %2 ==0) {
return hex2byte (s.getBytes(),0, s.length() >>1);
}else {
return hex2byte("0"+s);
}
}
private static byte[] hex2byte (byte[] b,int offset,int len) {
byte[] d =new byte[len];
for (int i=0; i
int shift = i%2 ==1 ?0 :4;
d[i>>1] |= Character.digit((char) b[offset+i],16) << shift;
}
return d;
}
/*
public static void main(String[] args) throws Exception {
AESUtil util = new AESUtil("abcdefghijklmnop"); // 密钥
System.out.println("cardNo:"+util.encryptData("1234")); // 加密
System.out.println("exp:"+util.decryptData("34+Jzs4KkwaCQWVyyAgwLA==")); // 解密
} */
}
/*
其中,BASE64Decoder与BASE64Encoder这两个类可以通过Jre System Library下面的rt.jar找到,这里顺便提及一下,sun.misc.BASE64Encoder找不到jar包的两种解决方法:
1、直接添加JRE System Library,在Eclipse里面项目右击->Java build path->JRE System Library...
2、导入已提取封装好的jar包。下载地址:sun.misc.BASE64Decoder.jar 下载
另外,还需要注意的是,AES密钥一般是16个字节为一块,然后对这一整块进行加密,如果不够16个字节,就需要补位,也就是16字节对齐。
*/
/**********************************使用********************************************/
1. 添加秘钥:
AESUtils aesUtils =new AESUtils("fityun666888ydkj");
2.加密:
String aesToken = aesUtils.encryptData(tokenstr);
网友评论