之前試過網上好多文章的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