В мире все люди делятся на два типа: одни хотят, что -то спрятать, другие же наоборот хотят, что то найти. Сегодня мы будем на стороне первых. Мы будем прятать.
О том как спрятать файлы в системе многие наверняка и так знают. А вот о том, как спрятать текст в файлы, но так что бы его не было видно, знают немногие. И так приступим.
Скрывать мы будем обычный текст из «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 созданые файлы имеют теже самые теги. Но при этом наша информация в них записывается и прекрасно читается. А если же нет тегов, то пишутся наши, которые прекрасно видны в проводнике. Так что лучше использовать файл с тегами, и тогда все точно будет супер секретно.
Если найдете какие-то ошибки, или знаете как можно улучшить скрипт, обязательно пишите. Буду только рад. За ошибки в оформлении поста прошу извинить, он первый.
