php 向加密文件写入额外的行?

发布于 2024-11-17 22:27:15 字数 746 浏览 5 评论 0原文

我正在尝试打开一个加密文件,该文件将存储信息列表,然后添加包含信息的新 ID,并将文件保存回原来加密的状态。我有正在运行的 xor/base64 函数,但我无法让文件保留旧信息。

这是我目前正在使用的:

$key = 'some key here';

$id = $_GET['id'];
$group = $_GET['group'];
$file = "groups.log";
$fp = fopen($file, "w+");
$fs = file_get_contents($file);


$filedec = xorstr(base64_decode($fs),$key);

$info = "$id: $group";
$filedec = $filedec . "$info\n";
$reencode = base64_encode(xorstr($filedec,$key));

fwrite($fp, $reencode);
fclose($fp);



function xorstr($str, $key) {
$outText = '';
for($i=0;$i<strlen($str);)
  {
    for($j=0;$j<strlen($key);$j++,$i++)
    {
        $outText .= $str[$i] ^ $key[$j];
    }
  }
  return $outText;
}


?>

它应该保存 ID 及其相应组的完整列表,但由于某种原因它只显示最后一个输入:(

I'm trying to open an encrypted file that will store a list of information, then add a new ID with information, and save the file back as it was originally encrypted. I have xor/base64 functions that are working, but I am having trouble getting the file to retain old information.

here is what I am currently using:

$key = 'some key here';

$id = $_GET['id'];
$group = $_GET['group'];
$file = "groups.log";
$fp = fopen($file, "w+");
$fs = file_get_contents($file);


$filedec = xorstr(base64_decode($fs),$key);

$info = "$id: $group";
$filedec = $filedec . "$info\n";
$reencode = base64_encode(xorstr($filedec,$key));

fwrite($fp, $reencode);
fclose($fp);



function xorstr($str, $key) {
$outText = '';
for($i=0;$i<strlen($str);)
  {
    for($j=0;$j<strlen($key);$j++,$i++)
    {
        $outText .= $str[$i] ^ $key[$j];
    }
  }
  return $outText;
}


?>

It should save an entire list of the ID's and their corresponding groups, but for some reason it's only showing the last input :(

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

沉睡月亮 2024-11-24 22:27:15

我不会称之为加密。也许是“麦片盒解码环”。如果您想要加密,请使用 mcrypt 函数。这充其量只是一种混淆。

问题是您在执行 file_get_contents 之前执行 fopen() 。作为 fopen() 调用的一部分,使用模式 w+ 将文件截断为 0 字节。因此,当 file_get_contents 出现时,您已经删除了原始文件。

$fs = file_get_contents(...);
$fh = fopen(..., 'w+');

按此顺序将解决问题。

I wouldn't call this encryption. "cereal box decoder ring", maybe. If you want encryption, then use the mcrypt functions. At best this is obfuscation.

The problem is that you're doing fopen() before doing file_get_contents. Using mode w+ truncates the file to 0-bytes as part of the fopen() call. So by the time file_get_contents comes up, you've deleted the original file.

$fs = file_get_contents(...);
$fh = fopen(..., 'w+');

in that order will fix the problem.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文