【问题标题】:Coldfusion Encryption and Perl DecryptionColdfusion加密和Perl解密
【发布时间】: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 库有效。它曾经记录在旧的 Adob​​e 文档中的某个地方。不记得在哪里。
  • 请注意,您的代码使用了严重破坏的加密,因为您不使用 IV(每次都应该完全随机)
  • 是的。就像@ikegami 建议的那样,您应该每次都使用 CBC 和不同的 IV 以获得更好的安全性。

标签: perl encryption coldfusion


【解决方案1】:

您的加密密钥是 base64 编码的,但 Crypt::ECB 需要一个原始字节字符串(不过,这在文档中并不清楚)。

use Convert::Base64;
...

my $encryption_key = decode_base64("8kbD1Cf8TIMvm8SRxNNfaQ==");
...

新输出:

27b0f3eb1286ffb462bdd3f14f5a41724df1ed888f1befa7174ca981c7898ed2ef841a15cde4332d030818b9923a2dba0c68c8352e128a0744df5f9fa955d3c72469fefdae2120de5d74319ed666ddd0

【讨论】:

  • @DonJuanInHeaven - 另请注意,CF 始终以大写形式返回十六进制。虽然两者都应该解码为相同的值。
  • 谢谢@mob,这确实是问题所在。
  • @mob - 我不熟悉 Perl。是不是也支持CBC模式,比如上面提到的ikegami?
猜你喜欢
  • 1970-01-01
  • 2012-05-04
  • 1970-01-01
  • 1970-01-01
  • 2021-06-10
  • 2016-02-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多