【发布时间】:2018-04-17 02:06:24
【问题描述】:
我正在尝试以 base64 编码对几 MB 或有时 GB 的文件进行编码/解码,但是某些数据以错误的方式进行编码/解码,这会导致奇怪的字符,例如:�̴.
我正在通过块编码读取文件块并单独保存每个块(可能这是问题,但我无法弄清楚)。
这是我迄今为止尝试过的:
<?php
function encode_file($Ifilename, $Efilename){
$handle = fopen($Ifilename, 'rb');
$outHandle = fopen($Efilename, 'wb');
$bufferSize = 8151;
while(!feof($handle)){
$buffer = fread($handle, $bufferSize);
$ebuffer = base64_encode($buffer);
fwrite($outHandle, $ebuffer);
}
fclose($handle);
fclose($outHandle);
}
function decode_file($Ifilename, $Efilename){
$handle = fopen($Ifilename, 'rb');
$outHandle = fopen($Efilename, 'wb');
$bufferSize = 8151;
while(!feof($handle)){
$buffer = fread($handle, $bufferSize);
$dbuffer = base64_decode($buffer);
fwrite($outHandle, $dbuffer);
}
fclose($handle);
fclose($outHandle);
}
encode_file('input.txt', 'out.bin');//Big text file ~4MBs
decode_file('out.bin', 'out.txt');
【问题讨论】:
-
Base64 不是加密。它甚至不接近。你的目标是什么?
-
我知道,目标只是降低可读性
-
Base64 不会以任何有意义的方式降低可读性。任何人都可以在没有密钥或任何特殊知识的情况下对数据进行 base64 解码。如果您试图混淆某些内容,这是一种非常无效的方法。
-
base64_encode 不是逐位操作,因此您的文件现在已损坏。
-
@RobbyCornelissen - 不。它是以非二进制(ascii)格式传输二进制数据。