前端加密后端解密

#头条创作挑战赛#

一、下载前端加密的js链接

https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js

某应用系统进行一个前后端的分离开发,前端可以使用html或者vue,后端采用java进行一个开发。其中前端某一部分导航功能需要跳转至后端(简单的说就是前端现在要把后端中的所有功能包含进来),这里就涉及到前端登录后的权限要同步到后端,实现单点登录,针对外部用户就采用了AES加密的方式验证。 实现思路: 在登录前端的情况下,外部用户点击跳转至后端的时候免登录,同步权限。这里是在跳转时,前后端协商采用AES的加解密对该用户进行校验。后端java使用Crypto++库,前端使用crypto-js.min.js进行AES的对应操作。经过测试,本例中的前后端代码的加密解密计算结果是一致的。

二、加密方法

  • 前端为html的引入

此处需要注意的是key的长度必须为16位

// 加密方法
function encrypt(word,key) {
    var keyHex = CryptoJS.enc.Utf8.parse(key);
    let encrypted = CryptoJS.AES.encrypt(word, keyHex, {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
    });
    return encrypted.toString();
}

  • 前端为vue的引入

npm install crypto-js

cnpm install crypto-js

import CryptoJS from 'crypto-js'
export default {
  data() {
  },
/**
* @description: 加密
* @param {*} word
* @param {*} key
*/
  methods: {
    encrypt(word,key) {
    var keyHex = CryptoJS.enc.Utf8.parse(key);
    let encrypted = CryptoJS.AES.encrypt(word, keyHex, {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
    });
    return encrypted.toString();
    }
  }
}

三、后台的解密方法

import sun.misc.BASE64Decoder;
import java.util.Base64;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.spec.SecretKeySpec;

public class DESUtil {
  //16位的key
 private static final String key=="xxxxxxxxxxxxxxxx";
  
  public static String decrypt(String hexStr){
      try{
          BASE64Decoder decoder = new BASE64Decoder();
          byte[] contentNew = decoder.decodeBuffer(hexStr);
          SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES");
          Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
          cipher.init(Cipher.DECRYPT_MODE, skeySpec);
          return new String(cipher.doFinal(contentNew));
      }catch (Exception e){
          e.printStackTrace();
      }
  }
}

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章