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);
	}

源碼下載地址
https://download.csdn.net/download/u010430099/11102584

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章