AES-128-CBC加密

1.工具类编写,用户后端

package com.project.util;

import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

import org.apache.commons.codec.binary.Base64;

import javax.crypto.Cipher;

public class AesEncryptUtil {
    //使用AES-128-CBC加密模式,key需要为16位,key和iv可以相同!
        private static String KEY = "abcdefg123456789";
        
        private static String IV = "abcdefg123456789";
        
        
        /**
         * 加密方法
         * @param data  要加密的数据
         * @param key 加密key
         * @param iv 加密iv
         * @return 加密的结果
         * @throws Exception
         */
        public static String encrypt(String data, String key, String iv) throws Exception {
            try {

                Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");//"算法/模式/补码方式"
                int blockSize = cipher.getBlockSize();

                byte[] dataBytes = data.getBytes();
                int plaintextLength = dataBytes.length;
                if (plaintextLength % blockSize != 0) {
                    plaintextLength = plaintextLength + (blockSize - (plaintextLength % blockSize));
                }

                byte[] plaintext = new byte[plaintextLength];
                System.arraycopy(dataBytes, 0, plaintext, 0, dataBytes.length);

                SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES");
                IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());

                cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec);
                byte[] encrypted = cipher.doFinal(plaintext);

                return new Base64().encodeToString(encrypted);

            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
        }

        /**
         * 解密方法
         * @param data 要解密的数据
         * @param key  解密key
         * @param iv 解密iv
         * @return 解密的结果
         * @throws Exception
         */
        public static String desEncrypt(String data, String key, String iv) throws Exception {
            try {
                byte[] encrypted1 = new Base64().decode(data);

                Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
                SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES");
                IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());

                cipher.init(Cipher.DECRYPT_MODE, keyspec, ivspec);

                byte[] original = cipher.doFinal(encrypted1);
                String originalString = new String(original);
                return originalString;
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
        }
        
        /**
         * 使用默认的key和iv加密
         * @param data
         * @return
         * @throws Exception
         */
        public static String encrypt(String data) throws Exception {
            return encrypt(data, KEY, IV);
        }
        
        /**
         * 使用默认的key和iv解密
         * @param data
         * @return
         * @throws Exception
         */
        public static String desEncrypt(String data) throws Exception {
            return desEncrypt(data, KEY, IV);
        }
        
        
        
        /**
        * 测试
        */
        public static void main(String args[]) throws Exception {

            String test = "test123";

            String data = null;
            String key = "abcdefg123456789";
            String iv = "abcdefg123456789";

            data = encrypt(test, key, iv);

            System.out.println(data);
            System.out.println(desEncrypt(data, key, iv));
        }
}

================================================================

eg:后台解密

  

  String unpassword = AesEncryptUtil.desEncrypt(password).trim();
    logName = AesEncryptUtil.desEncrypt(logName).trim();
    password = AesEncryptUtil.desEncrypt(password).trim();

2.前端编写

function encryptAes(data) {
        var key  = CryptoJS.enc.Latin1.parse('emall20190819123');
        var iv   = CryptoJS.enc.Latin1.parse('emall20190819123');
        return CryptoJS.AES.encrypt(data, key, {iv:iv,mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.ZeroPadding}).toString();
   }

===========================================

eg: 

   

var enusername = encryptAes(username);
        $("#usernameSub").val(enusername);
        var enpassword = encryptAes(password);
        $("#passwordSub").val(enpassword);

注意:一个密码比如test123在前台被加密传后,传到后台进行解密,像test123不是16位密码,那么他加密再被解密后后面会出现空格给他变为16位,所以解密后采用trim()去除了空格

  • 23
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值