CryptoJS-AES 前端JS加密,JAVA解密

原文: https://blog.csdn.net/bobozhangyx/article/details/80528893

使用Google的前端加密套件CryptoJS实现基于AES前后端的加/解密交互。

官方github地址:https://github.com/brix/crypto-js

前端加密demo

<script src="crypto-js-develop/src/core.js"></script>
<script src="crypto-js-develop/src/cipher-core.js"></script>
<script src="crypto-js-develop/src/mode-ecb.js"></script>
<script src="crypto-js-develop/src/aes.js"></script>
<script>
    var key = CryptoJS.enc.Utf8.parse("8NONwyJtHesysWpM");  
    var plaintText = 'ABCDEFGH'; // 明文  
    var encryptedData = CryptoJS.AES.encrypt(plaintText, key, {  
        mode: CryptoJS.mode.ECB,  
        padding: CryptoJS.pad.Pkcs7  
    });  
  console.log("加密前:"+plaintText + '');  
  console.log("加密后:"+encryptedData + '');  
</script>
注意:(1)js之间存在依赖关系,不能改变js引入的顺序。
      (2)加密结果是16进制的字符串,因此在后端处理时需要将16进制转为字节数组。

(3)js转化出的encryptedData是个对象,隐式转化下  var str =  encryptedData + "";

后端解密demo

/**
	 * PKCS5Padding -- Pkcs7 两种padding方法都可以
	 * @param content 3c2b1416d82883dfeaa6a9aa5ecb8245  16进制
	 * @param key
	 * @return
	 */
	public static String decryptAES(String content, String key) {
		try {
			content = replaceUnSpecial(content);
			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(parseHexStr2Byte(content)));
		} catch (Exception e) {
			e.printStackTrace();
			MonitorLogger.getInstance().log("AES.desEncrypt fail", e);
		}
		return null;
	}

/**将16进制转换为二进制
	 * @param hexStr
	 * @return
	 */
	public static byte[] parseHexStr2Byte(String hexStr) {
		if (hexStr.length() < 1)
			return null;
		byte[] result = new byte[hexStr.length()/2];
		for (int i = 0;i< hexStr.length()/2; i++) {
			int high = Integer.parseInt(hexStr.substring(i*2, i*2+1), 16);
			int low = Integer.parseInt(hexStr.substring(i*2+1, i*2+2), 16);
			result[i] = (byte) (high * 16 + low);
		}
		return result;
	}
 
  1. 注意:js使用PKCS7的补码方式,其实和PKCS5是一致的。

后记:

    AES还支持CBC加密的方式。

猜你喜欢

转载自blog.csdn.net/liushuiziyouliu/article/details/81707142
今日推荐