zoukankan      html  css  js  c++  java
  • 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));
    }
    }
  • 相关阅读:
    filter 在CSS用的效果
    Safari的CSS HACK方法
    HTML5网页如何让所有的浏览器都能识别语义元素标签样式
    Android/IOS APP界面设计之尺寸规范
    四、添加路由的两种方式
    三、配置
    二、注册登录状态维持(template和session)
    一、最小的Flask应用
    django之图形验证码生成
    django之环境配置
  • 原文地址:https://www.cnblogs.com/muliu/p/10874342.html
Copyright © 2011-2022 走看看