【发布时间】:2019-01-09 22:12:11
【问题描述】:
我有一种情况,我需要在 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>
这会产生:
27B0F3EB1286FFB462BDD3F14F5A41724DF1ED888F1BEFA7174CA981C7898ED2EF841A15CDE4332D030818B9923A2DBA0C68C8352E128A0744DF5F9FA955D3C72469FEFDAE2120DE5D74319ED666DDD0
还有 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;
这会产生:
e220ff2efe5d41e92237622ba969f35158d20e2c9c44995d44136d928d517462980321d4d6193fe62dc942fd717128442972524207777366954e5ceb2d1812ac997e06767a27d6a0145176d717c3836b
为什么加密的内容不同?有人对此有任何见解吗?
【问题讨论】:
-
接下来,ColdFusion 使用您的 base64 键作为文字字符串值,而不是 base64 值。正如@mob 下面提到的,PERL 正在解码 base64 加密密钥。
-
对于 ColdFusion 代码,“AES/ECB/PKCS5Padding”不是 ColdFusion 中 encrypt() 的记录加密类型。尽管使用了这个值,ColdFusion 确实使用了 AES。 (AES:NIST FIPS-197)这是 ColdFusion 中用于 encrypt() helpx.adobe.com/coldfusion/cfml-reference/coldfusion-functions/… 的有效参数列表
-
@WilGeno - 实际上是相反的:-)。 CF 确实 将其视为 base64 编码。 PERL 没有。此外,尽管最新的 CF 文档没有枚举所有类型,但 AES/ECB/PKCS5Padding 对底层 java 库有效。它曾经记录在旧的 Adobe 文档中的某个地方。不记得在哪里。
-
请注意,您的代码使用了严重破坏的加密,因为您不使用 IV(每次都应该完全随机)
-
是的。就像@ikegami 建议的那样,您应该每次都使用 CBC 和不同的 IV 以获得更好的安全性。
标签: perl encryption coldfusion