Encryption CF DESEDE encrypt()密钥长度问题

Encryption CF DESEDE encrypt()密钥长度问题,encryption,coldfusion,coldfusion-8,3des,Encryption,Coldfusion,Coldfusion 8,3des,我尝试使用第三方提供的密钥使用ColdFusion encrypt()加密字符串,如下所示: encrypteded = encrypt('theString', 'FD52250E230D1CDFD5C2DF0D57E3E0FEFD52250E230D1CDF', 'DESEDE/CBC/NoPadding', 'BASE64', ToBase64('0')); 我得到: 指定的密钥不是此加密的有效密钥:密钥算法错误,应为desed 在编码/解码方面,我必须对该密钥做些什么才能将其转换为正确

我尝试使用第三方提供的密钥使用ColdFusion encrypt()加密字符串,如下所示:

encrypteded = encrypt('theString', 'FD52250E230D1CDFD5C2DF0D57E3E0FEFD52250E230D1CDF', 'DESEDE/CBC/NoPadding', 'BASE64', ToBase64('0'));
我得到:

指定的密钥不是此加密的有效密钥:密钥算法错误,应为desed


在编码/解码方面,我必须对该密钥做些什么才能将其转换为正确的格式?

我唯一觉得不对劲的是您使用的算法值。也许试试这个

encrypteded = encrypt('theString', 'FD52250E230D1CDFD5C2DF0D57E3E0FEFD52250E230D1CDF', 'DESEDE', 'BASE64', ToBase64('0'));

我不知道
/CBC/NoPadding
设置是否符合您的要求,但我认为在算法参数中不允许使用这些设置。

唯一让我觉得不对劲的是您使用的算法值。也许试试这个

encrypteded = encrypt('theString', 'FD52250E230D1CDFD5C2DF0D57E3E0FEFD52250E230D1CDF', 'DESEDE', 'BASE64', ToBase64('0'));

我不知道
/CBC/NoPadding
设置是否符合您的要求,但我认为在算法参数中不允许使用这些设置。

通常,当使用其他语言提供的密钥时,您必须对其进行一些练习才能将其输入Base64

请尝试以下关键参数:

 ToBase64(BinaryDecode('FD52250E230D1CDFD5C2DF0D57E3E0FEFD52250E230D1CDF','hex'))
但是,为了让这对我来说有效,输入字符串需要是8字节的倍数(因为您指定了NoPadding),而IV也需要是8字节的倍数

所以,这对我来说是有效的-不确定你是否能够在另一端解密它,但是,如果他们指定的IV真的是你在那里列出的

 encrypteded = encrypt('theStrin', ToBase64(BinaryDecode('FD52250E230D1CDFD5C2DF0D57E3E0FEFD52250E230D1CDF','hex')), 'DESEDE/CBC/NoPadding', 'BASE64', ToBase64('0000'));
No IV也同样有效(显然输出不同):

如果您获得了Hex IV,那么您可以这样使用它:

encrypteded = encrypt('theStrin', ToBase64(BinaryDecode('FD52250E230D1CDFD5C2DF0D57E3E0FEFD52250E230D1CDF','hex')), 'DESEDE/CBC/NoPadding', 'BASE64', BinaryDecode("7fe8585328e9ac7b","hex"));

希望这是足够的信息,让你的方式

一般来说,当使用其他语言提供的键时,您必须对其进行一些练习才能将其输入Base64

请尝试以下关键参数:

 ToBase64(BinaryDecode('FD52250E230D1CDFD5C2DF0D57E3E0FEFD52250E230D1CDF','hex'))
但是,为了让这对我来说有效,输入字符串需要是8字节的倍数(因为您指定了NoPadding),而IV也需要是8字节的倍数

所以,这对我来说是有效的-不确定你是否能够在另一端解密它,但是,如果他们指定的IV真的是你在那里列出的

 encrypteded = encrypt('theStrin', ToBase64(BinaryDecode('FD52250E230D1CDFD5C2DF0D57E3E0FEFD52250E230D1CDF','hex')), 'DESEDE/CBC/NoPadding', 'BASE64', ToBase64('0000'));
No IV也同样有效(显然输出不同):

如果您获得了Hex IV,那么您可以这样使用它:

encrypteded = encrypt('theStrin', ToBase64(BinaryDecode('FD52250E230D1CDFD5C2DF0D57E3E0FEFD52250E230D1CDF','hex')), 'DESEDE/CBC/NoPadding', 'BASE64', BinaryDecode("7fe8585328e9ac7b","hex"));

希望这是足够的信息,让你的方式

在代码示例中,您传递的似乎是一个变量名,而不是键的字符串文字。我假设这是您的示例的问题,而不是您的实际代码,但我只是想检查一下。我道歉。在重新阅读奇偶校验代码后,我意识到它在寻找奇偶校验。抱歉,这只是示例的一个问题,不是实际的代码,但我已经更新了以防止更多的混淆。正如Edward M Smith提到的,请确保您与另一方使用相同的IV,否则您将得到不同的结果。在您的代码示例中,看起来您传递的是一个变量名,而不是键的字符串文字。我假设这是您的示例的问题,而不是您的实际代码,但我只是想检查一下。我道歉。在重新阅读奇偶校验代码后,我意识到它在寻找奇偶校验。很抱歉,这只是一个问题的例子,不是实际的代码,但我已经更新,以防止任何更多的混乱。也正如爱德华M史密斯提到的,确保你使用相同的IV作为另一方,否则你会得到不同的结果。亚当,DESEDE/CBC/NoPadding绝对是我需要使用的。不幸的是,这也是造成问题的原因。算法中允许额外设置,如/CBC/NoPadding。但是正如Edward M Smith所提到的,NoPadding意味着你必须自己填充字符串。ie确保输入字符串是8字节的倍数。adam、DESEDE/CBC/NoPadding绝对是我需要使用的。不幸的是,这也是造成问题的原因。算法中允许额外设置,如/CBC/NoPadding。但是正如Edward M Smith所提到的,NoPadding意味着你必须自己填充字符串。ie确保输入字符串是8字节的倍数。