我都无语了。 一直搞aes加密感觉哪里不对。 帮帮我。
```java
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
public class Main {
public static void main(String[] args) throws Exception {
System.out.println("Hello, World");
byte[] byte0 = new byte[10];
byte0[0] = (byte)120;
byte0[1] = (byte)156;
byte0[2] = (byte)171;
byte0[3] = (byte)174;
byte0[4] = (byte)5;
byte0[5] = (byte)0;
byte0[6] = (byte)1;
byte0[7] = (byte)117;
byte0[8] = (byte)0;
byte0[9] = (byte)249;
System.out.println(a(byte0));
}
public static String a(byte[] bArr) throws Exception {
try {
Cipher instance = Cipher.getInstance("AES/CBC/PKCS5Padding");
instance.init(1, new SecretKeySpec("AKkdp9dj0jsdl2l1".getBytes("UTF-8"), "AES"), new IvParameterSpec("1234567890123456".getBytes("UTF-8")));
byte[] ss = instance.doFinal(bArr);
return Base64.getEncoder().encodeToString(instance.doFinal(bArr));
} catch (Exception e) {
throw e;
}
}
}
运行上面java代码得到 ejDhvFJ5nx1ypMVjKU1dNg==
但是运行js这个代码得到的结果不一样 WoTnQ38nuDJmDp8hT4BEgA==
```javascript
function Uint8ArrayToString(e) {
for (var t = "", a = 0; a < e.length; a++)
t += String.fromCharCode(e[a]);
return t
}
var r2 = Uint8ArrayToString([120, 156, 171, 174, 5, 0, 1, 117, 0, 249])
var key = CryptoJS.enc.Utf8.parse("AKkdp9dj0jsdl2l1")
var iv = CryptoJS.enc.Utf8.parse("1234567890123456")
var encrypted = CryptoJS.AES.encrypt(r2, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
console.log(CryptoJS.enc.Base64.stringify(encrypted.ciphertext))
最终自己解决了。。。 给大家贴代码
```javascript
function encrypt(str) {
var Bytes = stringToUint8Array(str);
var c = pako.deflate(Bytes)
var r2 = CryptoJS.lib.WordArray.create(c)
var key = CryptoJS.enc.Utf8.parse("AKkdp9dj0jsdl2l1")
var encrypted = CryptoJS.AES.encrypt(r2, key, {
iv: CryptoJS.enc.Utf8.parse("1234567890123456"),
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
return CryptoJS.enc.Base64.stringify(encrypted.ciphertext);
}
```关键代码 var r2 = CryptoJS.lib.WordArray.create(c)