快捷搜索: 王者荣耀 脱发

javascript进行AES加密并用java进行AES解密(ECB模式)

之前试过网上好多文章的js加密,结果用java解密都会报Given final block not properly padded 这个错误,后来自己研究了一下,总结出一下代码; js使用CryptoJS库进行加密吗,代码如下

<html>

<body>
<h2>Hello World!</h2>
<!--<h5>godzilla</h5>-->
<script type="text/javascript" src="crypto-js.js"></script>
<script type="text/javascript" src="aes.js"></script>
<script type="text/javascript" src="mode-ecb.js"></script>
<script type="text/javascript">
    function Encrypt(word){
	// key 的原字符串是由 先md5加密之后再base64加密得到的字符串 所以这个需要先base64解密
		 var key = CryptoJS.enc.Base64.parse("4QrcOUm6Wau+VuBX8g+IPg==");	
		 var encrypted = CryptoJS.AES.encrypt(word, key, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7});
         return encrypted.toString();
	}
	function Decrypt(word){
		 var key = CryptoJS.enc.Base64.parse("4QrcOUm6Wau+VuBX8g+IPg==");	
 
		 var decrypt = CryptoJS.AES.decrypt(word, key, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7});
		 return CryptoJS.enc.Utf8.stringify(decrypt).toString();
	}
 
	var s = Encrypt("nihao")
	alert("encode:"+s);
	alert("decode:"+Decrypt(s));
</script>
</body>
</html>

java 使用javax.crypto包下的工具进行加解密 java的aes解密需要配置好工作模式和填充方式 java的PKCS5Padding填充方式 与 js中的 padding: CryptoJS.pad.Pkcs7 可以理解为同一种填充方式

// 加解密算法/工作模式/填充方式,Java6.0支持PKCS5Padding填充方式,BouncyCastle支持PKCS7Padding填充方式
public static final String CIPHER_ALGORITHM = "AES/ECB/PKCS5Padding";
public static String decrypt(String data, String key) throws Exception {
		Key k = toKey(Base64.decodeBase64(key));
		Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
		cipher.init(Cipher.DECRYPT_MODE, k); // 初始化Cipher对象,设置为解密模式
		return new String(cipher.doFinal(Base64.decodeBase64(data))); // 执行解密操作
	}
	/**
	 * 转换密钥
	 */
	public static Key toKey(byte[] key) throws Exception {
		return new SecretKeySpec(key, KEY_ALGORITHM);
	}

源码下载地址

经验分享 程序员 微信小程序 职场和发展