ColdFusion使用Salt +迭代加密,无法正常工作

时间:2016-08-18 11:14:03

标签: encryption coldfusion

这是函数,其中包含变量名称

encrypt(arguments.input, key, algorithm, encoding, arguments.salt, iterations)

我使用的是长度为44个字符的256位AES密钥。

我选择AESbase64进行算法和编码。

我尝试了各种生盐的方法, createUUID()generatesecretkey('AES',128)generatesecretkey('AES',256)

当盐每次更改时,加密结果始终与相同输入相同。就像忽略它一样,没有错误可以说明原因。

我还注意到,迭代对加密没有影响。

2 个答案:

答案 0 :(得分:3)

算法“AES”实际上是shorthand for "AES/ECB/PKCS5Padding"(即算法/模式/填充)。使用默认ECB mode时,iv将被忽略。使用手写算法表格指定CBC模式,即“AES / CBC / PKCS5Padding”

Runnable Example on Trycf.com

<cfscript>
for (i = 1; i <= 5; i++) {
    key = "ji3fd0ZKB87COPz5ZwqsQEQKcuRggtvvO98t3mZFxns=";
    // generate different iv's for DEMO only
    uuid = CreateUUID();
    iv = BinaryDecode( replace(uuid, "-", "", "all"), "hex");

    input = "This is plain text to be encrypted";
    encoding = "base64";
    algorithm = "AES/CBC/PKCS5Padding";

    encrypted = encrypt(input, key, algorithm, encoding, iv);
    decrypted = decrypt(encrypted, key, algorithm, encoding, iv);

    writeOutput("<hr>["& i &"] encrypted="& encrypted );
    writeOutput("<br>["& i &"] decrypted="& decrypted );
    writeOutput("<br>["& i &"] iv="& uuid );
}
</cfscript>

注意:要使用较大的密钥,例如256位,您必须先安装(JCE) Unlimited Strength Jurisdiction Policy Files

答案 1 :(得分:2)

AES仅支持三种密钥长度,16,24和32字节。请注意,44个字符是352位,这些都不是。但似乎加密方法需要Base64编码的字符串作为键,因此44字符的Base64键似乎是正确的。文档没有详细说明关键表单。

另请注意,对于16字节的AES,iv(arguments.salt)的大小必须完全一个块。

有关详细信息,请参阅Encrypt

如需更多帮助,请提供加密参数和结果。