zoukankan      html  css  js  c++  java
  • vue 参数的简单AES加密

    分享下我的AES小dome, 话不多说,直接上代码

    1.vue环境 

    2.编写加密,解密工具js

    /**
    * 工具类
    */
    import Vue from 'vue'
    import CryptoJS from 'crypto-js'
    // 默认的 KEY 与 IV
    const KEY = CryptoJS.enc.Utf8.parse("dufy20170329java");
    const IV = CryptoJS.enc.Utf8.parse("dufy20170329java");
    
    export default {//加密
      encrypt(word, keyStr, ivStr){
        let key = KEY
        let iv = IV
    
        if(keyStr&&ivStr){
          console.log('----自定义---key,iv')
          key = CryptoJS.enc.Utf8.parse(keyStr);
          iv = CryptoJS.enc.Utf8.parse(ivStr);
        }
        let srcs = CryptoJS.enc.Utf8.parse(word);
        var encrypted = CryptoJS.AES.encrypt(srcs, key, {
          iv: iv,
          mode: CryptoJS.mode.CBC,
          padding: CryptoJS.pad.ZeroPadding
        });
        return CryptoJS.enc.Base64.stringify(encrypted.ciphertext);
    },
    
      //解密
    decrypt(word, keyStr, ivStr){ let key = KEY let iv = IV if(keyStr&&ivStr){    key = CryptoJS.enc.Utf8.parse(keyStr);    iv = CryptoJS.enc.Utf8.parse(ivStr); }
      let base64
    = CryptoJS.enc.Base64.parse(word);   let src = CryptoJS.enc.Base64.stringify(base64);   var decrypt = CryptoJS.AES.decrypt(src, key, {     iv: iv,     mode: CryptoJS.mode.CBC,     padding: CryptoJS.pad.ZeroPadding   }) var decryptedStr = decrypt.toString(CryptoJS.enc.Utf8); return decryptedStr.toString(); }
    }

    3.vue页面引用   

     import Utils from '@/encrytUtils.js'

       Utils.encrypt(this.content)

    4.后端代码

    java 代码,Aes加密解密工具类
    
    /**
    * AES 128bit 加密解密工具类
    * @author dufy
    */
    import org.apache.commons.codec.binary.Base64;
    import javax.crypto.Cipher;
    import javax.crypto.spec.IvParameterSpec;
    import javax.crypto.spec.SecretKeySpec;
    
    public class AesEncryptUtil {
        //使用AES-128-CBC加密模式,key需要为16位,key和iv可以相同!
        private static String KEY = "dufy20170329java";
        private static String IV = "dufy20170329java";
    
        /**
        * 加密方法
        * @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) {
                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) {
                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 = "18729990110"; String data = null; String key = "dufy20170329java"; String iv = "dufy20170329java"; data = encrypt(test, key, iv); System.out.println(data); System.out.println(desEncrypt(data, key, iv)); } }

    ok分享结束,本文章参考网址

    https://www.cnblogs.com/yucm/p/9124655.html,

    https://www.cnblogs.com/libo0125ok/p/9224121.html

  • 相关阅读:
    Spring MVC返回多重的Json数据
    Eclipse Maven项目中修改JDK版本
    Maven的使用笔记
    Windows下Redis主从配置出现Writing to master:Unknow error
    Java开发必会的Linux命令(转)
    使用maven引入slf4j、logback时发生冲突
    使用SSM框架搭建JavaWeb,使用Junit测试时遇到CannotGetJdbcConnetionException
    HTTP基础
    express 热启动 静态文件部署 跨域解决 调试
    github+git提交 基础用法
  • 原文地址:https://www.cnblogs.com/free-discipline/p/11362478.html
Copyright © 2011-2022 走看看