我从供应商处收到以下数据,以便我们可以在最后解密数据。
Algorithm : AES 256bit
Key : test123xxxxxx
Key Length : 32
Initialize Vector: ei8B3hcD8VhnN_cK
Built in methods : YES (From inbuilt class CommonCryptor.h method with variable CCCryptorStatus).
请注意我不知道最后一行是否与我们的解密有关。
我在一个我们应该能够解码的示例字符串上尝试了以下内容。
<cfset item = "eLgExhcox5Ro1kPB1OlJP1w6tEJ3x94gM/QJS5dCZkyjEVfNjIid3R7JP4l1WZD1" />
<cfoutput>#decrypt(#item#, #key#, 'AES', 'Base64', #iv# )#</cfoutput>
我收到的错误是:参数5的值,当前为ei8B3hcD8VhnN_cK,必须是[B值。的类别,我找不到任何关于它的内容。
我也假设编码是Base64,我从供应商那里找到了。还有什么我不在想的。
答案 0 :(得分:2)
我的猜测是抱怨IV值不是二进制的。如果您的IV值是base64字符串,请使用binaryDecode(yourIVString, "base64")
获取二进制值。
一个班级[B值
[B
指的是预期的对象:一个字节数组。显然[B
是"binary name [...] as specified by the Java Language Specification (§13.1)"。如果您创建byte[]
数组并转储类名称,您将看到同样的事情:
// show binary and canonical class names
arr = javacast("byte[]", [1]);
writeOutput("name="& arr.getClass().name);
writeOutput("<br>canonicalName="& arr.getClass().canonicalName);
旁注,如果您使用的是256位密钥,请确保已安装(JCE) Unlimited Strength Jurisdiction Policy Files first。否则,您最多只能使用128位密钥。