&引用;无效填充“;ColdFusion加密/解密中的异常
我的代码抛出了一个我无法理解的异常。我还是个编程新手,请容忍我。这是我的代码:&引用;无效填充“;ColdFusion加密/解密中的异常,coldfusion,coldfusion-11,Coldfusion,Coldfusion 11,我的代码抛出了一个我无法理解的异常。我还是个编程新手,请容忍我。这是我的代码: <cfsetting showdebugoutput="false"> <cfprocessingdirective pageencoding="utf-8"> <html> <head> <title>Test</title> </head> <body> <cfset k
<cfsetting showdebugoutput="false">
<cfprocessingdirective pageencoding="utf-8">
<html>
<head>
<title>Test</title>
</head>
<body>
<cfset key = generateSecretKey("AES")>
<cfscript>
if (isDefined("form")) {
encFieldnamesArr = listToArray(form.fieldnames);
decFieldnamesArr = arrayNew(1);
for (paramName in encFieldnamesArr) {
arrayAppend(decFieldnamesArr, "#decrypt(paramName, key, 'AES', 'HEX')#");
}
}
</cfscript>
<cfform>
<cfinput name="#encrypt("firstName", key, "AES", "HEX")#" type="text" />
<cfinput name="#encrypt("lastName", key, "AES", "HEX")#" type="text" />
<cfinput type="submit" name="#encrypt("action", key, "AES", "HEX")#" value="submit" />
</cfform>
</body>
</html>
“无效填充”是什么意思?谢谢在解密时,您必须使用与加密值完全相同的
密钥
。每次加载页面时,您的代码都会生成一个全新的密钥:
<cfset key = generateSecretKey("AES")>
我意识到以上只是一个实验,但有几点提示:
表单
是一个系统结构,因此应始终对其进行定义。通常,您会检查是否存在特定的表单字段名。即
structKeyExists(形式为“someFieldName”)
和
标记即可。使用CF版本将导致CF向页面添加大量不必要的javascript代码#
符号。只需使用:
decrypt(参数名,密钥,'AES','HEX')
你能发布一个我们可以复制+粘贴+运行的帖子吗?显然,不要包含真实的
键
使用虚拟值或生成一次性键以用于演示目的。我猜您使用的解密密钥与加密密钥不同。您好,我刚刚添加了所有代码。没关系,我不是在应用程序中使用它,我只是好奇我是否可以这样做:)我完全忘记了在传递表单时页面会再次加载,因为我计划在ajax请求中使用它,我有一个不同的想法。谢谢D
<cfset key = generateSecretKey("AES")>
<cfscript>
// WORKS: encrypt and decrypt with the same key
key = generateSecretKey("AES");
text = "the quick brown fox jumps over the lazy dog";
encrypted = encrypt(text, key, 'AES', 'HEX');
decrypted = decrypt(encrypted, key, 'AES', 'HEX');
writeOutput("<br>text="& text);
writeOutput("<br>key="& key);
writeOutput("<br>encrypted="& encrypted);
writeOutput("<br>decrypted="& decrypted);
// FAILS: Decrypting with a *different* key will fail
key = generateSecretKey("AES");
writeOutput("<br>key="& key);
decrypted = decrypt(encrypted, key, 'AES', 'HEX');
</cfscript>