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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.02.2014, 16:10   #1
МелкоКодер
 
Аватар для МелкоКодер
 
Регистрация: 24.02.2014
Сообщений: 6
Сообщение Проблемы с шифрованием FGIntRSA на Delphi

Здравствуйте!
При шифровании и расшифровке текста алгоритмом RSA, реализованном в библиотеке FGIntRSA, возникла проблема.
Суть проблемы: текст не расшифровывается вообще.
Так как текст после зашифровывания имеет не читаемые символы, то весь результат я решил для надежности записать в бинарный файл, а перед расшифровкой загрузить из этого файла. Написал две процедуры, ошибок и ворнингов нет. В сам файл информация записалась. Пытаюсь расшифровать зашифрованный текст, и тут засада... Текст не расшифровывается.

Где и какую я ошибку допустил? Помогите пожалуйста исправить, привожу текст…

Код:
var
  tmp1,tmp2 : string; // глобальные переменные

…

procedure TForm1.CryptClick(Sender: TObject);
var
  e,n: TFGInt;
  i: integer;
  FS : TFileStream;
begin
  tmp1:=Memo1.Lines.Text;
  Base10StringToFGInt('10001', e);
  Base10StringToFGInt('135330880848120103668242617317652716361', n);
  // шифруем данные
  FGIntRSA.RSAEncrypt(tmp1, e, n, tmp2);
  // создаем файл
  FS:=TFileStream.Create(ExtractFilePath(Application.ExeName)+'test.bin', fmCreate);
  // запись данных в файл
  FS.Position:=0;
  for i:=1 to length(tmp2)
    do begin
      FS.Write(tmp2[i],1); // запишем всё по 1 байту
    end;
  FS.Free;
  tmp1:='';
  tmp2:='';
end;

procedure TForm1.DecryptClick(Sender: TObject);
var
  d,n,nilgInt: TFGInt;
  i: integer;
  FS : TFileStream;
begin
  // открываем файл
  FS:=TFileStream.Create(ExtractFilePath(Application.ExeName)+'test.bin', fmOpenRead);
  // чтение данных из файла с начала
  FS.Position:=0;
  for i:=1 to length(tmp1)
    do begin
      FS.Read(tmp1[i],1); // считаем всё по 1 байту
    end;
  FS.Free;
  Base10StringToFGInt('122123435986369089974213401515150188949', d);
  Base10StringToFGInt('135330880848120103668242617317652716361', n);
  // расшифровка данных
  FGIntRSA.RSADecrypt(tmp1, d, n, Nilgint, Nilgint, Nilgint, Nilgint, tmp2);
  Memo1.Lines.Text:=tmp2; // выведем результат в Мемо
  tmp1:='';
  tmp2:='';
end;
МелкоКодер вне форума Ответить с цитированием
Старый 25.02.2014, 01:58   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Почему у Вас различаются строки?
Код:
Base10StringToFGInt('10001', e);
Base10StringToFGInt('135330880848120103668242617317652716361', n);
...
Base10StringToFGInt('122123435986369089974213401515150188949', d);
Base10StringToFGInt('135330880848120103668242617317652716361', n);
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 25.02.2014, 02:10   #3
МелкоКодер
 
Аватар для МелкоКодер
 
Регистрация: 24.02.2014
Сообщений: 6
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Почему у Вас различаются строки?
Код:
Base10StringToFGInt('10001', e);
Base10StringToFGInt('135330880848120103668242617317652716361', n);
...
Base10StringToFGInt('122123435986369089974213401515150188949', d);
Base10StringToFGInt('135330880848120103668242617317652716361', n);
при шифровке нужны открытые ключи е и n, а при дешифрации нужен открытый n и закрытый ключ d. Кстати, сгенерированы при помощи утилиты RSATools2, скопировал с утилиты значения правильно...
МелкоКодер вне форума Ответить с цитированием
Старый 25.02.2014, 20:47   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Код:
procedure TForm1.Button3Click(Sender: TObject);
var
  e, n: TFGInt;
  d, nilgInt: TFGInt;
  tmp: string;
begin
  tmp := Memo1.Lines.Text;
  Base10StringToFGInt('3', e);
  Base10StringToFGInt('9173503', n);
  Base10StringToFGInt('6111579', d);
  FGIntRSA.RSAEncrypt(tmp, e, n, tmp);
  FGIntRSA.RSADecrypt(tmp, d, n, nilgInt, nilgInt, nilgInt, nilgInt, tmp);
  Memo1.Lines.Text := tmp;
end;
Срабатывает верно, вроде.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 26.02.2014, 12:19   #5
МелкоКодер
 
Аватар для МелкоКодер
 
Регистрация: 24.02.2014
Сообщений: 6
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Код:
procedure TForm1.Button3Click(Sender: TObject);
var
  e, n: TFGInt;
  d, nilgInt: TFGInt;
  tmp: string;
begin
  tmp := Memo1.Lines.Text;
  Base10StringToFGInt('3', e);
  Base10StringToFGInt('9173503', n);
  Base10StringToFGInt('6111579', d);
  FGIntRSA.RSAEncrypt(tmp, e, n, tmp);
  FGIntRSA.RSADecrypt(tmp, d, n, nilgInt, nilgInt, nilgInt, nilgInt, tmp);
  Memo1.Lines.Text := tmp;
end;
Срабатывает верно, вроде.
Спасибо )) Работает. Проверил со значениями из утилиты, тоже получилось. Кстати, в утилите поле e лучше поменять...

Последний раз редактировалось МелкоКодер; 26.02.2014 в 12:28.
МелкоКодер вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с RSA шифрованием Bax77 Общие вопросы Delphi 3 18.08.2013 17:47
Проблемы с шифрованием после JTextField.getText() Мироненко Павел Общие вопросы по Java, Java SE, Kotlin 2 16.05.2013 23:54
Прроблемы с шифрованием Ker_33rus Общие вопросы C/C++ 9 21.11.2010 17:54
Помогите с Шифрованием на С++ Сергей Человек Общие вопросы C/C++ 0 29.11.2009 16:03
Помогите пожалуйста с шифрованием! AnutkaSolnce Помощь студентам 5 19.05.2007 21:32