用PHP中的Passphrase解密Rijndael

时间:2016-11-30 10:24:12

标签: php aes rijndael

客户正在向我们发送使用" 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&#39;加密。 (参见附图显示客户在其末尾完成的对话窗口)。enter image description here

1 个答案:

答案 0 :(得分:0)

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

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

进行野鹅追逐对你没有帮助。即使你编写了一个解决方案,但由于许多因素,它可能会在将来失败。要求您的客户明确指定协议,而不是为您提供屏幕截图。