【问题标题】:Decrypt Rijndael with Passphrase in PHP在 PHP 中使用密码短语解密 Rijndael
【发布时间】:2016-11-30 10:24:11
【问题描述】:

一位客户向我们发送了一个使用“AES-256”加密的文件。它以二进制文件的形式出现(我通常会得到 base64 编码的文件,但这应该没问题),无奈之下,我使用 mcrypt_decrypt 遍历了 PHP 选项,但无法破解它。

<?php
$str = file_get_contents($argv[1]);
$key ='jimminny fred owns apple'; //not the actual one, but same length

$modes = array(
    MCRYPT_MODE_ECB,
    MCRYPT_MODE_CBC,
    MCRYPT_MODE_CFB,
    MCRYPT_MODE_OFB,
    MCRYPT_MODE_NOFB);

$cryps = array(
    MCRYPT_RIJNDAEL_128,
    MCRYPT_RIJNDAEL_256,
    MCRYPT_RIJNDAEL_192);

foreach($modes as $mode){
    foreach($cryps as $cryp){
        echo "\n\n$cryp $mode\n\n";
        echo mcrypt_decrypt($cryp, $key, $str, $mode);
    }
}

我的理解是,我应该收到一个 32 字节的密钥,而不是 24 字符的密码,但他们正在使用一个名为 GlobalScape 的程序,这就是它的“Rijndael”加密所需要的全部内容。 (见附上的屏幕截图,显示了客户最后完成的对话窗口)。

【问题讨论】:

  • 经过更多的测试和混乱,我很确定 GlobalScape 文件没有以标准方式加密。事实证明,密码不一定是 32 字节——我不明白为什么,但 PHP 似乎很高兴——即使在 v5.6 中,根据 php 的 mcrypt 页面,它应该坚持使用 32 字节的密钥.net

标签: php aes rijndael


【解决方案1】:

我已经检查了该站点,但 GlobalScape 没有提供有关它们如何加密的任何详细信息。他们不仅没有指定用于“Rijndael”加密的密钥派生函数 (KDF)。他们不太可能直接使用密码作为密钥——除非他们是完整的木偶——但 KDF 可以是任何东西。他们也没有指定 AES 的操作模式

不要像那样使用垃圾。只需使用 PGP 或其中一种标准化选项来发送/接收消息。

去追逐野鹅对你没有帮助。即使您编写了一个解决方案,它也可能由于多种因素而在未来失败。要求您的客户明确指定协议,而不是给您屏幕截图。

【讨论】:

  • 谢谢。好建议。几乎和我的经理最后说的完全一样:)。
猜你喜欢
  • 2012-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-26
  • 1970-01-01
相关资源
最近更新 更多