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

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

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

前端加密demo





注意:(1)js之间存在依赖关系,不能改变js引入的顺序。(2)加密结果是16进制的字符串,因此在后端处理时需要将16进制转为字节数组。


后端解密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;
	}

注意:js使用PKCS7的补码方式,其实和PKCS5是一致的。

后记:

    AES还支持CBC加密的方式。

你可能感兴趣的:(算法)