zoukankan      html  css  js  c++  java
  • AES 加密工具类

    /**
    * AES 是一种可逆加密算法,对用户的敏感信息加密处理 对原始数据进行AES加密后,在进行Base64编码转化;
    */
    public class AESOperator {

    /*
    * 加密用的Key 可以用26个字母和数字组成 此处使用AES-128-CBC加密模式,key需要为16位。0021XdSh0021XdSh
    */
    private String sKey = "10d2Xd4hf0s1XvSw";
    private String ivParameter = "10d2Xd4hf0s1XvSw";
    private static AESOperator instance = null;

    private AESOperator() {

    }

    public static AESOperator getInstance() {
    if (instance == null)
    instance = new AESOperator();
    return instance;
    }

    public static String Encrypt(String encData, String secretKey, String vector) throws Exception {

    if (secretKey == null) {
    return null;
    }
    if (secretKey.length() != 16) {
    return null;
    }
    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
    byte[] raw = secretKey.getBytes();
    SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
    IvParameterSpec iv = new IvParameterSpec(vector.getBytes());// 使用CBC模式,需要一个向量iv,可增加加密算法的强度

    cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
    byte[] encrypted = cipher.doFinal(encData.getBytes("utf-8"));
    return new BASE64Encoder().encode(encrypted);// ˴ʹ��BASE64��ת
    }


    // ����
    public String encrypt(String sSrc) throws Exception {
    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
    byte[] raw = sKey.getBytes();
    SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
    IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes());// ʹ��CBCģʽ����Ҫһ������iv�������Ӽ������ǿ��
    cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
    byte[] encrypted = cipher.doFinal(sSrc.getBytes("utf-8"));
    return new BASE64Encoder().encode(encrypted);// ˴ʹ��BASE64��ת
    }

    // ����
    public String decrypt(String sSrc) throws Exception {
    try {
    byte[] raw = sKey.getBytes("ASCII");
    SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
    IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes());
    cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
    byte[] encrypted1 = new BASE64Decoder().decodeBuffer(sSrc);// ����base64����
    byte[] original = cipher.doFinal(encrypted1);
    String originalString = new String(original, "utf-8");
    return originalString;
    } catch (Exception ex) {
    return null;
    }
    }

    public String decrypt(String sSrc, String key, String ivs) throws Exception {
    try {
    byte[] raw = key.getBytes("ASCII");
    SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
    IvParameterSpec iv = new IvParameterSpec(ivs.getBytes());
    cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
    byte[] encrypted1 = new BASE64Decoder().decodeBuffer(sSrc);// ����base64����
    byte[] original = cipher.doFinal(encrypted1);
    String originalString = new String(original, "utf-8");
    return originalString;
    } catch (Exception ex) {
    return null;
    }
    }

    public static String encodeBytes(byte[] bytes) {
    StringBuffer strBuf = new StringBuffer();

    for (int i = 0; i < bytes.length; i++) {
    strBuf.append((char) (((bytes[i] >> 4) & 0xF) + ((int) 'a')));
    strBuf.append((char) (((bytes[i]) & 0xF) + ((int) 'a')));
    }

    return strBuf.toString();
    }


    }
  • 相关阅读:
    XAML学习笔记之Layout(五)——ViewBox
    XAML学习笔记——Layout(三)
    XAML学习笔记——Layout(二)
    XAML学习笔记——Layout(一)
    从0开始搭建SQL Server 2012 AlwaysOn 第三篇(安装数据,配置AlwaysOn)
    从0开始搭建SQL Server 2012 AlwaysOn 第二篇(配置故障转移集群)
    从0开始搭建SQL Server 2012 AlwaysOn 第一篇(AD域与DNS)
    Sql Server 2012 事务复制遇到的问题及解决方式
    Sql Server 2008R2升级 Sql Server 2012 问题
    第一次ACM
  • 原文地址:https://www.cnblogs.com/zhou2016/p/5333546.html
Copyright © 2011-2022 走看看