Coldfusion加密和Perl解密

Coldfusion加密和Perl解密,perl,encryption,coldfusion,Perl,Encryption,Coldfusion,我需要在Coldfusion中加密内容,然后在Perl中解密。下面是一个示例Coldfusion代码: <cfscript> input = "Amidst the roar of liberated Rome, Of nations freed, and the world overjoy'd"; encryptionKey = "8kbD1Cf8TIMvm8SRxNNfaQ=="; encryptedInput = encrypt( input, encryption

我需要在Coldfusion中加密内容,然后在Perl中解密。下面是一个示例Coldfusion代码:

<cfscript>
  input = "Amidst the roar of liberated Rome, Of nations freed, and the world overjoy'd";
  encryptionKey = "8kbD1Cf8TIMvm8SRxNNfaQ==";
  encryptedInput = encrypt( input, encryptionKey, "AES/ECB/PKCS5Padding", "hex" );
  writeOutput( "Encrypted Input: #encryptedInput# <br />" );
</cfscript>
以及Perl:

use 5.24.1;
use Crypt::ECB qw(encrypt_hex);

my $input = "Amidst the roar of liberated Rome, Of nations freed, and the world overjoy'd";
my $encryption_key = "8kbD1Cf8TIMvm8SRxNNfaQ==";
my $encrypted_input = encrypt_hex($encryption_key, 'Rijndael', $input);
say $encrypted_input;
这将产生:

27B0F3EB1286FFB462BDD3F14F5A41724DF1ED888F1BEFA7174CA981C7898ED2EF841A15CDE4332D030818B9923A2DBA0C68C8352E128A0744DF5F9FA955D3C72469FEFDAE2120DE5D74319ED666DDD0 
e220ff2efe5d41e92237622ba969f35158d20e2c9c44995d44136d928d517462980321d4d6193fe62dc942fd717128442972524207777366954e5ceb2d1812ac997e06767a27d6a0145176d717c3836b

为什么加密内容不同?有人对此有什么见解吗?

您的加密密钥是base64编码的,但是
Crypt::ECB
需要一个原始字节字符串(但文档中没有明确说明)

新产出:

27b0f3eb1286ffb462bdd3f14f5a41724df1ed888f1befa7174ca981c7898ed2ef841a15cde4332d030818b9923a2dba0c68c8352e128a0744df5f9fa955d3c72469fefdae2120de5d74319ed666ddd0

接下来,ColdFusion将base64键用作文本字符串值,而不是base64值。正如@mob在下面指出的,PERL正在解码base64加密密钥。对于ColdFusion代码,“AES/ECB/PKCS5Padding”不是ColdFusion中encrypt()的文档化加密类型。尽管使用此值,ColdFusion确实使用AES。(AES:NIST FIPS-197)以下是ColdFusion for encrypt()中的有效参数列表@WilGeno-实际上它是相反的:-)。CF将其视为base64编码。PERL没有。此外,尽管最新的CF文档没有列举所有类型,但是AES/ECB/PKCS5Padding对于底层java库是有效的。它曾经被记录在旧的Adobe文档中的某个地方。但我想不起来是在哪里。请注意,您的代码使用了严重破坏的加密,因为您没有使用IV(每次都应该是完全随机的)True。就像@ikegami建议的那样,为了更好的安全性,每次都应该使用CBC和不同的IV。@DonJuanInHeaven-还要注意,CF总是以大写形式返回十六进制。虽然两者应该解码为相同的值。谢谢@mob,这确实是问题所在。@mob-我不熟悉Perl。它是否也支持CBC模式,如上面提到的ikegami?
27b0f3eb1286ffb462bdd3f14f5a41724df1ed888f1befa7174ca981c7898ed2ef841a15cde4332d030818b9923a2dba0c68c8352e128a0744df5f9fa955d3c72469fefdae2120de5d74319ed666ddd0