【发布时间】: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