Скремблирование файла
80 повідомлень
#15 років тому
Есть задача считать аудио или видео файл и проскремблировать. Язык выполнения с++. С си дружу очень редко, так что считай нуб.. так вот по работе с потоковыми файлами уже битый час ищу инфу в гугле. Может кто подскажет?Среда разработки VC
Заранее спасибо
300 повідомлень
#15 років тому
Скремблировать можно по-разномучем ваc rar a archive file.mp3 -ppassword не устраивает?
80 повідомлень
#15 років тому
Скремлировать нужно биты по заданной формуле.. вот и задача от сюда получить побитный код ави файла..
50 повідомлень
#15 років тому
Если вы работаете с файлом как с набором байтов\битов, то какая разница что он содержит? вам же не через кодек пропускать эту авишку. соответственно, и гуглить потоковую передачу данных не обязательно(в данном случае). достаточно погуглить чтение\запись файлов и битовые операции.пример простого шифрования (xor): посилання
80 повідомлень
#15 років тому
Спасибо.. это я слва богу за пол дня мучений уже понял) Теперь вопрос как считать весь файл побайтно.. пытаюсь юзать std::ifstream не подскажите?
50 повідомлень
80 повідомлень
#15 років тому
Собственно что то получилось.. биты получил по маске следующим (знаю что не лучшим, но всетаки работающим образом) Остается последний вопрос.. как из бит получить чаровский массив переменных.Фукция получения бит:
char* ByteToBit(char*massiv,int size)
{
char*result=new char;
int pos=0;
for(int j=0;j<size;j++)
{
int mask=128;
for(int i=0;i<8;i++,pos++)
{
result=massiv&mask;
if(result!=0)result=1;
mask=mask>>1;
}
}
return result;
}
к слову посилання использовать бы не хотелось.
702 повідомлення
#15 років тому
Это никуда не годится.У вас так сразу же начнуться заботы с утечкой памяти и производительностью.
Лучше напишите развернуто - что за формула.
А код придется переписать...
80 повідомлень
#15 років тому
Формулой скремблирования пока не занимался. Сейчас задача получить биты и потом просто их собрать обратно в читаемый код. Если всетаки интересует формула - B(i) = A(i)+B(i-5)+B(i-15)+ это сложение по модулю 2
50 повідомлень
#15 років тому
Цитата ("mamamiya"):B(i) = A(i)+B(i-5)+B(i-15)а что это за буквы? если B(i)-это бит(i), то что такое A?
по поводу получения битов: посилання
unsigned char e = d & (1 << n); //d has the byte value.
хотя на самом деле проверять значение бита вам и не надо.
у вас в формуле есть (i-15), то есть можно работать с двумя парами байтов. можно написать нечто типа такого:
unsigned short x;
x=(A(i)|(y<<(k-5))|(y<<(k-15)))<<k; //вычисляется бит к
z=z|x; //формируется следующая пара байтов
A(i)-параметр А; к-номер вычисляемого бита; x-х; у-элементы массива, в который прочитан файл; z-следующий элемент.
зы псевдокод. в таком виде не юзабельно.
80 повідомлень
#15 років тому
B - бит полученный в результате работы скремблера.А - исходный бит
80 повідомлень
#15 років тому
Получать биты прийдется в любом случае потому что по формуле в 1 такте скремблера используется значения битов из разных байтов..
702 повідомлення
#15 років тому
Если i - это номер бита в потоке, то что делать при таких входных условиях, когда i < 5 или i < 15 ?
300 повідомлень
#15 років тому
Скажу вам откровенноне занимайтесь ерундой
существуют готовые надежные и быстрые криптоалгоритмы
а ваше скремблирование декодируется на раз
50 повідомлень
#15 років тому
То есть пойти к преподавателю(а существует очень высокая вероятность, что это задание от него) и сказать "не занимайтесь ерундой..."? 
а биты как таковые получать не нужно, вычисление х в моём предыдущем посте. идея была в том, чтобы работать со структурой из двух пар байтов, первая пара-уже обработанное, вторая-обрабатываемое на сейчас. нечто типа кольцевого буфера на 32 бита

80 повідомлень
#15 років тому
Цитата ("Nitrogeniy"):То есть пойти к преподавателю(а существует очень высокая вероятность, что это задание от него) и сказать "не занимайтесь ерундой..."?
а оно так и есть)) с си работать для зароботка мне еще рановато)))
Буду пробовать как вы описали. Спасибо