1

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

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

我得到:

“指定的密钥不是此加密的有效密钥:错误的密钥算法,预期 DESede。”

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

4

2 回答 2

1

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

试试这个作为关键参数:

 ToBase64(BinaryDecode('FD52250E230D1CDFD5C2DF0D57E3E0FEFD52250E230D1CDF','hex'))

但是,为了使这项工作对我有用,输入字符串需要是 8 个字节的倍数(因为您指定了 NoPadding),并且 IV 也需要是 8 个字节的倍数。

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

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

没有 IV 也可以正常工作(显然,输出不同):

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

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

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

希望这是足够的信息让您上路!

于 2010-09-08T23:28:34.780 回答
0

在我看来,唯一不合适的是您正在使用的算法值。也许试试这个?

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

我不知道/CBC/NoPadding设置是否是您想要的,但我认为算法参数中不允许使用它们。

于 2010-09-08T19:35:04.693 回答