Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.01.2011, 22:31   #1
JerichoX
Новичок
Джуниор
 
Регистрация: 12.01.2011
Сообщений: 1
По умолчанию Шифрование методом гаммирования!

В общем стояла такая задача:

Реализовать конгруэнтный датчик псевдослучайных чисел для m=256, константы A=5, C=3, T(0)=1. И затем реализовать шифрование методом гаммирования слова из 10 символов. В нашем случае это слово "бездельник". То есть нужно будет T наложить на NUM (номер буквы в алфавите).

Вообщем генератор я реализовал, перепроверил - все сошлось. Получилось 10 значений от T(1) до T(9) соответственно, T(0) нам уже известно (1 8 43 218 69 92 207 14 73 112). Так вот, теперь нам нужно кажде значение наложить на номер буквы нашего исходного слова и получить ее в зашифрованном виде. Вот например, первая буква в нашем исходном слове "бездельник" - "б". В массиве она идет 2 по счету, если считать с нуля. M[34]={' ','а','б',....}. То есть нам нужно T(0)=1 наложить на номер буквы "б" в алфавите. То есть 1 на 2. Делаем это через двоичную систему. 2 в двоичной системе будет равно 0010, а 1 будет 0001. В результате наложения получается 0011, что в десятеричной системе равно 3. То есть в зашифрованном виде это будет 3 буква в массиве - "в". Собственно на первую букву программа правильно накладывает шифр. На вторую букву слова "е" - тоже правильно. 8 накладываем на 6 получаем 1110 в двоичной или 14 в десятеричной, соответственно 14 буква в массиве это "м". Третью букву вроде тоже правильно определяет, а потом какая то ерунда пошла. Во-первых, шифрует всего 8 букв, а не 10. В третьих неправильно. По моим расчетам должно получиться либо "вмярюкгаюу", либо "вм сялдяф". Но заметил такую странность - вроде неправильно он определяет те буквы, у которых после наложения в десятеричной системе получается значение больше 34, т.е. больше чем символов в массиве. Допустим буква "д" = 223, следующая буква "е" = 67. И я делал с учетом того, что пройдя 34 символа, он продолжит сначала проходить массив, пока не дойдет до своего значения, в нашем случае 223. Возможно, я не прав. Вообщем вот прилагаю скрин, как все выходит:



и код программы:

Код:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "CSPIN"
#pragma resource "*.dfm"
TForm1 *Form1;
char M[34]={' ','а','б','в','г','д','е',
'ё','ж','з','и','й','к','л','м','н','о',
'п','р','с','т','у','ф','х','ц','ч','ш',
'щ','ъ','ы','ь','э','ю','я'}; //массив алфавита
char R[10]; //массив исходного слова
const m=256;
int T[10], Num[10], A, C, i, s, v;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
A=CSpinEdit1->Value;
C=CSpinEdit2->Value;
T[0]=CSpinEdit3->Value;
for (i=0;i<10;i++)
T[i+1]=(A*T[i]+C)%m;
for (i=0;i<10;i++)
Memo3->Text=Memo3->Text+T[i]+" ";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
for (i=0;i<10;i++)
R[i]=Memo1->Lines->Text.c_str()[i];
for(s=0;s<10;s++)
for(v=0;v<34;v++)
{
if (M[v]==R[s])
Num[s]=v;
}
for(s=0;s<10;s++)
{
Num[s]=T[s]^Num[s];
if (Num[s]>34) Num[s]=Num[s]-34;
}
for(s=0;s<10;s++)
Memo3->Text=Memo3->Text+M[Num[s]];
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
Memo1->Clear();
Memo2->Clear();
Memo3->Clear();
}
//---------------------------------------------------------------------------

Ребят, помогите пожалуйста! Хоть чем нибудь. Если потребуется, могу залить исходники.
JerichoX вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Шифрование методом гаммирования student_63 Безопасность, Шифрование 9 28.04.2012 17:36
Шифрование методом перестановок Sphex Фриланс 7 18.08.2010 14:06
Шифрация методом гаммирования Last Помощь студентам 4 22.11.2009 11:27
Метод шифрования\дешифрования методом гаммирования, используя для гаммы алгоритм случайных чисел... Си. Mastu-Basta Помощь студентам 0 13.09.2009 16:19
Шифрование методом сдвига Paul Hindenburg Общие вопросы Delphi 5 24.01.2008 08:30