PHP - 读取文件,转换数据,写入新文件


Php - Read file, alterate data, write new file

我正在尝试在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 文件中没有任何内容。

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

最后,我在不使用第一次解密的情况下解决了它。可以使用以下代码加密原始数据:

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

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

谢谢。

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

我不确定这是否是解决方案,但我对 ecnrypted 字符串有一些问题,该字符串已通过 base64 编码解决。你可以试一试:-)