我正在尝试在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文件中没有任何内容)。
你能帮我解决这个问题吗?
答案 0 :(得分:1)
最后,我在不使用第一次解密的情况下解决了这个问题。 可以使用以下代码加密原始数据:
$data = AESEncrypt(pad($data, 16), $user_key);
你可以把这条线放在一个无限循环中(没有真正无限的顺便说一句),这仍然有效。然后你可以用你选择的语言解密它。
感谢。
答案 1 :(得分:0)
jar
个文件是压缩档案。使用zip
扩展名创建zip文件。请务必将其重命名为.jar
(或.bin
)
答案 2 :(得分:0)
我不确定这是否是解决方案,但我遇到了一些ecnrypted字符串的问题,这是通过base64编码解决的。你可以尝试一下: - )