[c Linux] Эмуляция работы скремблера

  • Автор темы Rydj
  • Дата начала
Статус
Закрыто для дальнейших ответов.
R

Rydj

#1
Доброго времени суток. Народ не могли бы мне помочь дописать скремблер задача такая: написать программу эмулирующую работу скремблера, программа должна генерировать поток битов из
скремблера и использовать его (группируя по 8 бит) для шифрования байтов,
считанных со стандартного ввода, пока они имеются; зашифрованные данные
выводятся на стандартный вывод. Собственно со скремблером я вроде разобрался и написал, а вот дальше какой-то ступор.
C++:
	 #include <stdio.h>

int shift(int *s, int poly, int size)
{
int result =*s&1;
int a=0;
int b=*s&poly;
while (b) {
a+=b&1;
b>>=1;
}
*s>>=1;
*s|= (a&1)<<(size-1);
return result;
}

int main()
{
int s;
int i;
int m;
i = 1;
s = 742;
for (i = 1; i < 100; i++)
{
m = shift(&s, 742, 10);
printf("%d\n", m);
}
}
 

lazybiz

Well-known member
03.11.2010
1 339
0
#2
Объясни мне необразованному, что ты подразумеваешь под словом "скремблер" ? Просто какой-то метод шифрования?

... а вот дальше какой-то ступор.
А дальше у тебя не получается получить данные из стандартного потока ввода или что?
 
R

Rydj

#3
В задании же написано что должен делать скремблер (написать программу эмулирующую работу скремблера, программа должна генерировать поток битов из
скремблера и использовать его (группируя по 8 бит) для шифрования байтов), где там написано что скремблер это "какой-то метод шифрования"? На вход скремблера мы подаём разрядность, полином и начальное содержимое регистра, далее он нам генерит поток битов и с помощью потока надо зашифровать байты. ПРоблема заключается в том как с помощью потока зашифровать байты?
 

lazybiz

Well-known member
03.11.2010
1 339
0
#4
где там написано что скремблер это "какой-то метод шифрования"?
А где у меня написано что это метод шифрования? Ты вопрос от не вопроса отличаешь?

как с помощью потока зашифровать байты?
Каким методом шифровать надо?
 
R

Rydj

#5
на счёт метода не знаю, в задании говорится зашифровать с помощью потока больше никаких уточнений нету.
 

lazybiz

Well-known member
03.11.2010
1 339
0
#6
Ну тогда шифруй ксором. Это самый простой и обратимый способ шифрования. По типу:
C++:
a = b ^ с; // с - любая константа от 0 до 255 включительно (при с == 0 шифрования происходить не будет).
 
R

Rydj

#7
ок спс, посоветовали на другом форуме вот так:
C++:
int shift8(int *s, int poly, int size)
{
int rv=0;
int i;
for(i=0;i<8;++i) rv=(rv<<1)|shift(s,poly,size);
}
int main()
{
int s;
int i;
int m;
s = 742;
while((i = getchar()) != EOF)
{
m = shift8(&s, 742, 10);
putchar(m^i);
}
}
Вот так да?
 

lazybiz

Well-known member
03.11.2010
1 339
0
#9
dreamer
Спасибо конечно что поддержал но...

Rydj
... я что-то недопонимаю.. у тебя с шифрованием не получается или со крамблером!?? Скажи толком что тебе нужно. То что тебе посоветовали на другом форуме я тебе еще раньше посоветовал.
 

lazybiz

Well-known member
03.11.2010
1 339
0
#10
dreamer, кстати эта статья целиком и полностью описывает весь процесс.
Rydj, почитай. Что непонятно - спрашивай.
 
Статус
Закрыто для дальнейших ответов.