3

我正在尝试在 PHP 中创建一种文件生成器。基本上,它获取一个默认文件,读取数据,解密数据(以 AES 加密),使用用户密码加密数据并将所有这些字节粘贴到具有客户端名称的新文件中。

这很容易,但我遇到了一些问题。这是我当前的代码:

// Load the original raw file
$data = file_get_contents('default.bin');
if (!$data) exit();

// Decrypt the raw data with the default key
$data = AESDecrypt($data, 'default_16_b_key');

// Encrypt the raw data with the user key
$data = AESEncrypt(pad($data, 16), $user_key);

$fileName = sprintf('client_%s.bin', $client_name);
file_put_contents($fileName, $data);

以下是我正在使用的功能:

function AESEncrypt($data, $key)
{
    return mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_ECB);
}

function AESDecrypt($data, $key)
{
    return mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_ECB);
}

function pad($data, $blocksize)
{ 
    $pad = $blocksize - (strlen($data) % $blocksize); 
    return $data . str_repeat(chr($pad), $pad); 
}

AES 函数运行良好,因为我可以解密和加密一个简单的字符串。pad 功能似乎完成了它的工作。

问题是当我尝试执行生成的文件(这是重命名后的 jar 文件)时,我收到此消息“意外文件结束”,除了一个空白文件(0 字节)之外,我的 jar 文件中没有任何内容。

你能帮我解决这个问题吗?

4

3 回答 3

1

最后,我没有使用第一次解密就解决了。可以使用以下代码加密原始数据:

$data = AESEncrypt(pad($data, 16), $user_key);

你可以把这条线放在一个无限循环中(不是真的无限),这仍然有效。然后,您可以使用您选择的语言对其进行解密。

谢谢。

于 2012-06-28T07:48:01.023 回答
0

jar文件是压缩档案。使用zip扩展名创建一个 zip 文件。请记住将其重命名为.jar(或.bin

于 2012-06-24T09:02:17.047 回答
0

我不确定这是否是解决方案,但我遇到了一些加密字符串的问题,通过 base64encoding 解决了它。你可以试一试:-)

于 2012-06-24T09:04:50.667 回答