美文网首页
AES 加密

AES 加密

作者: LJQ__MY | 来源:发表于2019-03-21 10:51 被阅读0次

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

相关文章

网友评论

      本文标题:AES 加密

      本文链接:https://www.haomeiwen.com/subject/cyzvtqtx.html