Скремблирование файла
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"):То есть пойти к преподавателю(а существует очень высокая вероятность, что это задание от него) и сказать "не занимайтесь ерундой..."?
а оно так и есть)) с си работать для зароботка мне еще рановато)))
Буду пробовать как вы описали. Спасибо