Java 使用AES 128解密字节数组
我一直在寻找可以对AES 128加密字符串进行解密的javascript库。我发现了几个:Java 使用AES 128解密字节数组,java,javascript,cordova,cryptography,aes,Java,Javascript,Cordova,Cryptography,Aes,我一直在寻找可以对AES 128加密字符串进行解密的javascript库。我发现了几个: :您必须查找源代码 我的问题是这些算法将字符串或十六进制字符串作为输入。我的情况有点特殊,因为我的输入是字节数组。我已经用Java编写了一个测试用例: String key = "MrSShZqHM6dtVNdX"; String message = "NzZiNGM3ZjIyNjM5ZWM3M2YxMGM5NjgzZDQzZDA3ZTQ="; String charset
- :您必须查找源代码
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]代码>
JavaAES破译器将字节数组作为输入,但在Javascript中,没有lib这样做。我试着稍微调整一下,但伙计,这是核心代码。这真的不是我的领域
最近的一次是在电视上。我的密钥是MrSShZqHM6dtVNdX
,使用apache commons Hex.encodeHex,我得到了4D7253685A71484D36474564E6458,给了我3339393930320A0A0A0A0A0A0A0A0A的输出,这几乎是我想要的输出(390902)Java!=JavaScript
!Java之于Javascript就像汽车之于地毯。。。我知道:)我还没有给出上下文,但我需要用javascript来做这件事,因为它适用于使用phonegap的多设备移动应用程序。我可以编写一个phonegap插件,但我需要最少的平台特定代码。而这个aes解密,不应该是针对android或blackberry的。这就是为什么我希望它使用javascript。java部分只是根据测试用例验证数据。在本例中,您应该这样标记它。根据我所读到的。。将字节数组转换为字符串并使用它不是更容易吗?是为您解答该问题的链接。:)@ChrisCooney它给出了ルøワdH è→ 代码>和vᄡᅦ&9↓sヨテᅯ=¦代码>:(