一、下载前端加密的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的对应操作。经过测试,本例中的前后端代码的加密解密计算结果是一致的。
二、加密方法
此处需要注意的是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();
}
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 条评论) “” |