1 Star 2 Fork 3

Rey Wong / 最佳实践

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
通用加解密算法.md 4.84 KB
一键复制 编辑 原始数据 按行查看 历史
wr090097 提交于 2021-08-12 12:21 . 添加文档
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
/**
 * Created by wangrui on 2016/4/5.
 */
public class AESOperator {
    /*
     * 加密用的Key 可以用26个字母和数字组成 此处使用AES-128-CBC加密模式,key需要为16位。
     */
    private static String ivParameter = "0392039203920300";
    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");
        // 使用CBC模式,需要一个向量iv,可增加加密算法的强度
        IvParameterSpec iv = new IvParameterSpec(vector.getBytes());
        cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
        byte[] encrypted = cipher.doFinal(encData.getBytes("utf-8"));
        // 此处使用BASE64做转码。
        return Base64.encode(encrypted);
    }
    /**
     * 加密算法
     *
     * @param sSrc
     * @param key
     * @return
     * @throws Exception
     */
    public static String encrypt(String sSrc, String key) throws Exception {
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        byte[] raw = key.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 Base64.encode(encrypted);// 此处使用BASE64做转码。
    }
    // 解密
    public static String decrypt(String sSrc, String key) 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(ivParameter.getBytes());
            cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
            byte[] encrypted1 = Base64.decode(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 = Base64.decode(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();
    }
    public static void main(String[] args) throws Exception {
        // 需要加密的字串
        String cSrc = "13888888888";
        String key = "smkldospdosldaaa";
        // 加密
        long start = System.currentTimeMillis();
        String enString = AESOperator.encrypt(cSrc, key);
        System.out.println("加密后的字串是:" + enString + "====" + enString.length());
        long end = System.currentTimeMillis();
        System.out.println("耗时==" + (end - start) / 1000.0 + "秒");
//        long lUseTime = System.currentTimeMillis() - lStart;
//        System.out.println("加密耗时:" + lUseTime + "毫秒");
//        // 解密
//        enString="FPVCzNlCv8Ipy5ZgML4ERAstWXZ7kkTCELWfxTBcq2g=";
//        lStart = System.currentTimeMillis();
//        String DeString = AESOperator.decrypt(enString, key);
//        System.out.println("解密后的字串是:" + DeString);
//        lUseTime = System.currentTimeMillis() - lStart;
//        System.out.println("解密耗时:" + lUseTime + "毫秒");
//        System.out.println("##################");
//
//        System.out.println(AESOperator.encrypt("{\"phoneno\":\"15001971052\",\"paramkey\":\"0\",\"flag\":false}", "1291587967818735"));
    }
    class A {
    }
}
1
https://gitee.com/reywong/best_practices.git
git@gitee.com:reywong/best_practices.git
reywong
best_practices
最佳实践
master

搜索帮助