• AESUtil


    package com.tebon.ams.util;

    import javax.crypto.Cipher;
    import javax.crypto.KeyGenerator;
    import javax.crypto.SecretKey;
    import javax.crypto.spec.SecretKeySpec;
    import java.security.Key;
    import java.security.NoSuchAlgorithmException;

    /**
    * @description: ${description}
    * @author: dfz
    * @create: 2019-05-16
    **/
    public class AES {
    private static final String KEY_ALGORITHM = "AES";
    private static final String DEFAULT_CIPHER_ALGORITHM = "AES/ECB/PKCS5Padding";//默认的加密算法

    public static byte[] initSecretKey() {

    //返回生成指定算法密钥生成器的 KeyGenerator 对象
    KeyGenerator kg = null;
    try {
    kg = KeyGenerator.getInstance(KEY_ALGORITHM);
    } catch (NoSuchAlgorithmException e) {
    e.printStackTrace();
    return new byte[0];
    }
    //初始化此密钥生成器,使其具有确定的密钥大小
    //AES 要求密钥长度为 128
    kg.init(128);
    //生成一个密钥
    SecretKey secretKey = kg.generateKey();
    return secretKey.getEncoded();
    }

    private static Key toKey(byte[] key){
    //生成密钥
    return new SecretKeySpec(key, KEY_ALGORITHM);
    }

    public static byte[] encrypt(byte[] data,Key key) throws Exception{
    return encrypt(data, key,DEFAULT_CIPHER_ALGORITHM);
    }

    public static byte[] encrypt(byte[] data,byte[] key) throws Exception{
    return encrypt(data, key,DEFAULT_CIPHER_ALGORITHM);
    }

    public static byte[] encrypt(byte[] data,byte[] key,String cipherAlgorithm) throws Exception{
    //还原密钥
    Key k = toKey(key);
    return encrypt(data, k, cipherAlgorithm);
    }

    public static byte[] encrypt(byte[] data,Key key,String cipherAlgorithm) throws Exception{
    //实例化
    Cipher cipher = Cipher.getInstance(cipherAlgorithm);
    //使用密钥初始化,设置为加密模式
    cipher.init(Cipher.ENCRYPT_MODE, key);
    //执行操作
    return cipher.doFinal(data);
    }

    public static byte[] decrypt(byte[] data,byte[] key) throws Exception{
    return decrypt(data, key,DEFAULT_CIPHER_ALGORITHM);
    }

    public static byte[] decrypt(byte[] data,Key key) throws Exception{
    return decrypt(data, key,DEFAULT_CIPHER_ALGORITHM);
    }

    public static byte[] decrypt(byte[] data,byte[] key,String cipherAlgorithm) throws Exception{
    //还原密钥
    Key k = toKey(key);
    return decrypt(data, k, cipherAlgorithm);
    }

    public static byte[] decrypt(byte[] data,Key key,String cipherAlgorithm) throws Exception{
    //实例化
    Cipher cipher = Cipher.getInstance(cipherAlgorithm);
    //使用密钥初始化,设置为解密模式
    cipher.init(Cipher.DECRYPT_MODE, key);
    //执行操作
    return cipher.doFinal(data);
    }

    private static String showByteArray(byte[] data){
    if(null == data){
    return null;
    }
    StringBuilder sb = new StringBuilder("{");
    for(byte b:data){
    sb.append(b).append(",");
    }
    sb.deleteCharAt(sb.length()-1);
    sb.append("}");
    return sb.toString();
    }

    public static void main(String[] args) throws Exception {
    byte[] key = initSecretKey();
    System.out.println("key:"+showByteArray(key));
    Key k = toKey(key); //生成秘钥
    String data ="1234567890";
    System.out.println("加密前数据: string:"+data);
    System.out.println("加密前数据: byte[]:"+showByteArray(data.getBytes()));
    System.out.println();
    byte[] encryptData = encrypt(data.getBytes(), k);//数据加密
    System.out.println("加密后数据: byte[]:"+showByteArray(encryptData));
    // System.out.println("加密后数据: hexStr:"+Hex.encodeHexStr(encryptData));
    System.out.println();
    byte[] decryptData = decrypt(encryptData, k);//数据解密
    System.out.println("解密后数据: byte[]:"+showByteArray(decryptData));
    System.out.println("解密后数据: string:"+new String(decryptData));
    }
    }
  • 相关阅读:
    nmon监控Linux服务器系统资源
    日志处理(二) 日志组件logback的介绍及配置使用方法(转)
    PreparedStatement是如何大幅度提高性能的
    【声援团视频合集!!!保存转发进行扩散!!】
    换主题
    Octave 常用命令
    【DSP】TMS320F28335的GPIO
    Oauth2 初步
    arm汇编几个经典例题
    JavaScript关键字之super()
  • 原文地址:https://www.cnblogs.com/muliu/p/10874342.html
Copyright © 2020-2023  润新知