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


    }
  • 相关阅读:
    [学习日记]进程、线程和模块
    [学习日记]对SOAP头内添加信息的验证,可实现对请求WEB服务进行身份验证。
    [梦里原创]关于猫和老鼠的问题(程序算法)
    [学习日记]对控件的继承和重载
    [学习日记]VB图像处理之像素的获取和输出
    猫和老鼠问题的讨论
    [音乐欣赏]丁香花
    推荐一个WINDOWS系统文件介绍的网站
    [转]查查在中国有多少人的名字和你一样!
    计算机语言发展图解
  • 原文地址:https://www.cnblogs.com/zhou2016/p/5333546.html
Copyright © 2011-2022 走看看