我已经找到了可以解密AES 128加密字符串的JavaScript库。我找到了几个:
我的问题是这些算法将String或HexString作为输入。我的情况有点特殊,因为我输入的是一个字节数组。我在 Java :
中编写了一个测试用例 String key = "MrSShZqHM6dtVNdX";
String message = "NzZiNGM3ZjIyNjM5ZWM3M2YxMGM5NjgzZDQzZDA3ZTQ=";
String charsetName = "UTF-8";
String algo = "AES";
// decode message
byte[] decodeBase64 = Base64.decodeBase64(message.getBytes(charsetName));
System.out.println("decoded message: " + new String(decodeBase64));
// prepare the key
SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(charsetName), algo);
// aes 128 decipher
Cipher cipher = Cipher.getInstance(algo);
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
byte[] doFinal = cipher.doFinal(Hex.decodeHex(new String(decodeBase64).toCharArray()));
System.out.println("done with: " + new String(doFinal));
输出是:
decoded message: 76b4c7f22639ec73f10c9683d43d07e4
done with: 390902
但这是Java,对吗? org.apache.commons.codec.binary.Hex.decodeHex
方法将表示十六进制值的字符数组转换为这些相同值的字节数组。返回的数组将是传递数组长度的一半,因为它需要两个字符来表示任何给定的字节。如果传递的char数组具有奇数个元素,则抛出异常。
在十进制表示中,Hex.decodeHex
方法给出了这个字节数组:[118, -76, -57, -14, 38, 57, -20, 115, -15, 12, -106, -125, -44, 61, 7, -28];
java AES解密器将一个字节数组作为输入,但在Javascript中,没有lib可以做到这一点。我试图稍微调整一下here,但这是硬核代码。这真的不是我的领域......
我最接近的是this online tool。我的关键是MrSShZqHM6dtVNdX
和apache commons Hex.encodeHex我得到了输出3339303930320a0a0a0a0a0a0a0a0a0a,这几乎是我想要的输出(390902)...