我正在尝试使用第三方提供的密钥使用ColdFusion encrypt()加密字符串,如下所示:
encrypteded = encrypt('theString', 'FD52250E230D1CDFD5C2DF0D57E3E0FEFD52250E230D1CDF', 'DESEDE/CBC/NoPadding', 'BASE64', ToBase64('0'));
我明白了:
“指定的密钥不是此加密的有效密钥:错误的密钥算法,预期的DESede。”
在编码/解码方面,我需要做什么才能使其格式正确?
答案 0 :(得分:1)
通常情况下,当使用其他语言提供的密钥时,你必须在它上面做一些体操才能进入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也起作用(显然有不同的输出):
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"));
希望这足以让你顺利上路!
答案 1 :(得分:0)
对我而言,唯一似乎是您正在使用的算法值。也许试试这个?
encrypteded = encrypt('theString', 'FD52250E230D1CDFD5C2DF0D57E3E0FEFD52250E230D1CDF', 'DESEDE', 'BASE64', ToBase64('0'));
我不知道/CBC/NoPadding
设置是否符合您的要求,但我不认为算法参数会被允许。