Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用AES 128解密字节数组_Java_Javascript_Cordova_Cryptography_Aes - Fatal编程技术网

Java 使用AES 128解密字节数组

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

我一直在寻找可以对AES 128加密字符串进行解密的javascript库。我发现了几个:

  • :您必须查找源代码
我的问题是这些算法将字符串或十六进制字符串作为输入。我的情况有点特殊,因为我的输入是字节数组。我已经用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]

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￱ヨテᅯ=¦:(