AES后端加密解密数据CBC模式

℡╲_俬逩灬. 提交于 2019-12-26 19:32:31

AES后端加密解密数据CBC模式

今天项目有用到加密登陆密码,实际业务是前端加密,后端解密,主要使用的是AES进行解密

主要maven依赖
		<dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>1.10</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.4</version>
        </dependency>
上代码
public class AESUtil {
    //密钥 (需要前端和后端保持一致)要求16位
    private static final String KEY = "12345678910abcde";
    //偏移量(CBC模式需要,需要前端和后端保持一致)要求16位
    private static final String IV = "12345678910abcde";
    //具体算法/加密模式/补码方式
    private static final String ALGORITHMSTR = "AES/CBC/PKCS5Padding";
	//测试
    public static void main(String[] args) throws Exception {
        String password = "123456";
        System.out.println("加密前:" + password);
        String encrypt = encrypt(password);
        System.out.println("加密后:" + encrypt);
        String decrypt = decrypt(encrypt);
        System.out.println("解密后:" + decrypt);
    }

    // 加密
    public static String encrypt(String sSrc) throws Exception {
        byte[] raw = KEY.getBytes();
        SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
        //"算法/CBC模式/补码方式"
        Cipher cipher = Cipher.getInstance(ALGORITHMSTR);
        IvParameterSpec iv = new IvParameterSpec(IV.getBytes());
        cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
        byte[] encrypted = cipher.doFinal(sSrc.getBytes());
        //BASE64做转码功能,进行2次加密
        return new BASE64Encoder().encode(encrypted);
    }

    // 解密
    public static String decrypt(String sSrc) throws Exception {
        byte[] raw = KEY.getBytes("UTF-8");
        SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
        Cipher cipher = Cipher.getInstance(ALGORITHMSTR);
        IvParameterSpec iv = new IvParameterSpec(IV.getBytes());
        cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
        //base64解密
        byte[] encrypted1 = new BASE64Decoder().decodeBuffer(sSrc);
        try {
            byte[] original = cipher.doFinal(encrypted1);
            String originalString = new String(original);
            return originalString;
        } catch (Exception e) {
            System.out.println(e.toString());
            return null;
        }
    }
}

总结:第一次用到AES加密,自己也整理了一下,这个算是很简单也很好理解使用的一个工具类。具体里面的KEY和IV是可以自定义的,字母数字均可,要求是16位。里面具体的一些api可以查看源码研究研究,技术不行。
不对之处欢迎指点

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!