В мире все люди делятся на два типа: одни хотят, что -то спрятать, другие же наоборот хотят, что то найти. Сегодня мы будем на стороне первых. Мы будем прятать.
О том как спрятать файлы в системе многие наверняка и так знают. А вот о том, как спрятать текст в файлы, но так что бы его не было видно, знают немногие. И так приступим.
Скрывать мы будем обычный текст из «txt» файла. А записывать его мы будем в mp3 файлы. Многие знаю что в mp3 файлах есть теги. Но вряд ли кто то задумывался какова их длинна и что с ними можно сделать. В Википедии сказано что длина тегов
равна 30 символам. Еще есть тег Комментарий, но мы не будем его трогать.
Теги можно изменять с помощью специальных программ. Таких как например Mp3Tag .
Что и куда мы будем писать разобрались. Теперь решим на чем мы будем писать. Для этих целей я выбрал PHP и PEAR package MP3_Id. К этому набору нам надо добавить виртуальный сервер, Denwer или XAMPP или еще какой. Кому как нравится.
Наш инструмент будет состоят из двух скриптов, один из которых будет записывать, а другой соответственно считывать MP3 теги.
Для начала надо установить модуль PEAR MP3_Id:
Приступим к разбору скриптов.
Ниже будут перечислены и разобраны функции использующиеся в этом скрипте.
Нам нужна функция которая подсчитает количество строк по 30 символов в файле.
Функция читающая данные по 30 символов из файла в массив.
Функции для работы с тегами.
Чтение:
Запись:
Также нам потребуется создавать произвольные имена файлов. Мы просто будем брать один исходный и копировать его.
И так все необходимые функции у нас есть. Можно составлять структуру скрипта.
Подключим только что установленный модуль.
И вот функция которая прячет текст в теги. Ей на вход подаются: массив со строками, и количество строк.
Вот и весь скрипт для записи текста в теги mp3 файлов. Хочу добавить, что MP3 файл для копирования желательно брать маленького размера. И называть его file.mp3.
Осталось написать скрипт который вернет нам все обратно. Из тегов mp3 в текстовый файл.
Опять подключаем модуль PEAR
Создаем файл для записи.
Уже знакомая нам функция для чтения тегов. Слегка изменная.
Переходим в дерикторию с файлами.
создаем список файлов MP3
Сортируем его
И для каждого файла вызываем функцию ReadTags
Как работать с PEAR MP3_Id лучше посмотреть на оффсайте. Я врядли понятно объясню. Во время опытов было выявлено, что если исходный файл имеет какие то теги, то в windows созданые файлы имеют теже самые теги. Но при этом наша информация в них записывается и прекрасно читается. А если же нет тегов, то пишутся наши, которые прекрасно видны в проводнике. Так что лучше использовать файл с тегами, и тогда все точно будет супер секретно.
Если найдете какие-то ошибки, или знаете как можно улучшить скрипт, обязательно пишите. Буду только рад. За ошибки в оформлении поста прошу извинить, он первый.
О том как спрятать файлы в системе многие наверняка и так знают. А вот о том, как спрятать текст в файлы, но так что бы его не было видно, знают немногие. И так приступим.
Скрывать мы будем обычный текст из «txt» файла. А записывать его мы будем в mp3 файлы. Многие знаю что в mp3 файлах есть теги. Но вряд ли кто то задумывался какова их длинна и что с ними можно сделать. В Википедии сказано что длина тегов
- название
- исполнитель
- альбом
равна 30 символам. Еще есть тег Комментарий, но мы не будем его трогать.
Теги можно изменять с помощью специальных программ. Таких как например Mp3Tag .
Что и куда мы будем писать разобрались. Теперь решим на чем мы будем писать. Для этих целей я выбрал PHP и PEAR package MP3_Id. К этому набору нам надо добавить виртуальный сервер, Denwer или XAMPP или еще какой. Кому как нравится.
Наш инструмент будет состоят из двух скриптов, один из которых будет записывать, а другой соответственно считывать MP3 теги.
Для начала надо установить модуль PEAR MP3_Id:
- Start Menu->Run->CMD
- Переходим в деректорию где установлен интерпретатор php -> pear install MP3_Id
Приступим к разбору скриптов.
Скрипт номер один. read.php
Ниже будут перечислены и разобраны функции использующиеся в этом скрипте.
Нам нужна функция которая подсчитает количество строк по 30 символов в файле.
function CalcSize($f) //рассчитываем количество строк по 30 символов
{
$size = 0; //количествое символов в файле
while(!feof($f))
{
fread($f, 1);
$size++;
}
$dataCount = floor($size / 30) + 1;
//на 30 без остатка не получится разделить поэтому на всякий случай прибавляем еще одну сточку.
fclose($f);
return $dataCount;
// возвращаем количество строк по 30 символов
}
Функция читающая данные по 30 символов из файла в массив.
function ReadDataFiles($size)
{
$arr = array();
$f = fopen('data.txt','rb');
for($i = 0; $i < $size; $i++)
{
$arr[$i] = fread($f, 30);//пишем в строчку по 30 смволов
}
fclose($f);
return $arr;
}
Функции для работы с тегами.
Чтение:
function ReadTags($file)
{
echo $file.' ';
$mp3 = &new MP3_Id();
$result = $mp3->read($file);
echo $mp3->getTag('name');
echo $mp3->getTag('artists');
echo $mp3->getTag('album');
}
Запись:
function SetTags($file, $data1,$data2,$data3)
{
$mp3 = &new MP3_Id();
$result = $mp3->read($file);
$mp3->setTag('name', $data1);
$mp3->setTag('artists', $data2);
$mp3->setTag('album', $data3);
$result = $mp3->write();
}
Также нам потребуется создавать произвольные имена файлов. Мы просто будем брать один исходный и копировать его.
function GenerateName()
{
$abc = array('q','w','e','r','t','y',
'u','i','o','p','a','s',
'd','f','g','h','j','k',
'l','z','x','c','v','b',
'n','m','1','2','3','4',
'5','6','7','8','9','0');
$name="";
for($i = 0; $i < 8; $i++)
{
$index = rand(0, count($abc) - 1);
$name .= $abc[$index];
}
return $name;
}
И так все необходимые функции у нас есть. Можно составлять структуру скрипта.
Подключим только что установленный модуль.
require_once 'MP3/Id.php';
$fileSize = CalcSize(); // количество строк по 30 символов
$words = ReadDataFiles($fileSize);// массив со строками
И вот функция которая прячет текст в теги. Ей на вход подаются: массив со строками, и количество строк.
function HideData($arr, $number)
{
$numberMp3Files = floor($number / 3) + 1;
//количество мп3 файлов для заливки(делаем на один больше потому что округление происходит в меньшую //сторону
mkdir('files');//создаем дерикторию для файлов
for($i = 0; $i < $numberMp3Files; $i++) // создаем файлы
{
$name = GenerateName();
$name .= '.mp3';
copy('file.mp3','files/'.$name);// копируем
}
chdir('files');// переходим в нее
$list = glob('*.mp3'); // получаем список mp3 файлов
sort($list); //сортируем по увеличению
$a = 0; // счетчик для слов
$b = 0; // стечик для записаных файлов
for($i = 0; $i < count($list); $i++)
{
SetTags($list[$i],$arr[$a],$arr[$a+1],$arr[$a+2]);
$a +=3;
if($b < count($list))$b++; //если количество записаных файлов меньше то продолжаем
else break; // иначе брейк
}
}
Вот и весь скрипт для записи текста в теги mp3 файлов. Хочу добавить, что MP3 файл для копирования желательно брать маленького размера. И называть его file.mp3.
Осталось написать скрипт который вернет нам все обратно. Из тегов mp3 в текстовый файл.
Скрипт номер два. write.php
Опять подключаем модуль PEAR
require_once 'MP3/Id.php';
Создаем файл для записи.
$handle = fopen("new_data.txt","w");
Уже знакомая нам функция для чтения тегов. Слегка изменная.
function ReadTags($file, $fo)
{
$mp3 = &new MP3_Id();
$result = $mp3->read($file);
$name = $mp3->getTag('name');
$srtists = $mp3->getTag('artists');
$album = $mp3->getTag('album');
fputs($fo, "$name");
fputs($fo,"$artists");
fputs($fo, "$album");
}
Переходим в дерикторию с файлами.
chdir('files');
создаем список файлов MP3
$list = glob('*.mp3');
Сортируем его
sort($list);
И для каждого файла вызываем функцию ReadTags
foreach($list as $a)
{
ReadTags($a, $handle);
}
Как работать с PEAR MP3_Id лучше посмотреть на оффсайте. Я врядли понятно объясню. Во время опытов было выявлено, что если исходный файл имеет какие то теги, то в windows созданые файлы имеют теже самые теги. Но при этом наша информация в них записывается и прекрасно читается. А если же нет тегов, то пишутся наши, которые прекрасно видны в проводнике. Так что лучше использовать файл с тегами, и тогда все точно будет супер секретно.
Если найдете какие-то ошибки, или знаете как можно улучшить скрипт, обязательно пишите. Буду только рад. За ошибки в оформлении поста прошу извинить, он первый.