Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.11.11;
Скачать: CL | DM;

Вниз

Реализация RSA в Delphi   Найти похожие ветки 

 
Nucer   (2007-10-07 11:43) [0]

Уже второй день ищу в интернет реализацию RSA на Delphi - ничего нет. Нужен режим ECB nopadding. Может подскажите - где такое найти? Или лучше не тратить время зря и начать уже самому изучать литературу.


 
DVM ©   (2007-10-07 11:45) [1]


> Или лучше не тратить время зря и начать уже самому изучать
> литературу.

Это полезнее в любом случае


> Уже второй день ищу в интернет реализацию RSA на Delphi
> - ничего нет.

на torry.net смотрел? Там компонентов и модулей для криптографии как грязи.


 
DrPass ©   (2007-10-07 11:47) [2]

Компоненты LockBox. RSA и многое другое


 
Суслик ©   (2007-10-07 12:36) [3]


> DrPass ©   (07.10.07 11:47) [2]
> Компоненты LockBox. RSA и многое другое

а не мертвенький ли проект? все таки 4.5 года назад релиз был последний.

либо проект и так хорош, либо плохо.

Само -то пользовался?


 
Sergey Masloff   (2007-10-07 13:50) [4]

Суслик ©   (07.10.07 12:36) [3]
Я пользовался. Проект отличный, просто Turbo Power в свое время прекратили работу на рынке компонент для Delphi и одновременно практически все продукты выложили в бесплатный доступ (не не OpenSource) то есть развиваться они не развиваются но пользоваться - пожалуйста.
 Я активно пользовался и LockBox и AsyncPro - впечетления самые хорошие.


 
Суслик ©   (2007-10-07 14:29) [5]

Ок, Сергей, спасибо за информацию. Буду знать.


 
Суслик ©   (2007-10-07 14:35) [6]


> Sergey Masloff   (07.10.07 13:50) [4]

Да, у них там много компонентов серии TurboPower.
Я также щаметил, что они пишут - исходники открыты, но это не опенсорс. Я так понял, что имеется в виду, что исходники берите, но не дописывайте в рамках ОС проекта. Так?

Т.е. (подведу итог) это профессиональные компоненты того времени, которые были выложены в общий доступ по причине прекращения их продажи и разработки оригинальным производителем. Так?

Т.е. компонентам можно верить.


 
Kolan ©   (2007-10-07 14:49) [7]

> Т.е. компонентам можно верить.

AsyncPro — ниче так, я пользуюсь для RS 485&#133


 
Sergey Masloff   (2007-10-07 17:26) [8]

Суслик ©   (07.10.07 14:35) [6]
>это профессиональные компоненты того времени, которые были выложены в >общий доступ по причине прекращения их продажи и разработки >оригинальным производителем. Так?
Да, все так.


 
DrPass ©   (2007-10-07 17:52) [9]


> а не мертвенький ли проект? все таки 4.5 года назад релиз
> был последний.

Собственно, нынче алгоритм RSA такой же, как и 4.5 года назад, так что ничего страшного :)


 
Eraser ©   (2007-10-07 18:20) [10]

> LockBox

компоненты хорошие, сам использую в паре проектов, но только для хэширования, т.к. скорость генерации ключей неахти..


 
Инс ©   (2007-10-07 21:49) [11]

Лично я пользуюсь вот этим:
http://www.submanifold.be/triade/GInt/gint.html


 
52DAC3E4   (2007-10-07 22:12) [12]

— Кстати, о галактиках. Их классические спиральные формы были известны уже первым
изобретателям телескопов, — продолжал Кими, — но потребовалось несколько столетий,
чтобы понять в них реальное отражение структуры вселенной — волокон, или, вернее, пластов,
нашего мира, переслоенного с Тамасом и вместе с ним закрученного в бесконечную спираль. И
отдельные элементы, от галактик до атомов, в каждой ступени со своими особыми качествами
всеобщих законов. Оказалось, что свет и другие излучения никогда не распространяются во
вселенной прямолинейно, а навиваются на спираль, одновременно скользя по геликоиде и все
более разворачиваясь по мере удаления от наблюдателя. Получили объяснение сжатие и
растягивание световых волн с укорочением их по мере вхождения в глубь спирали и кажущееся
разбегание звезд и галактик в дальних витках. Разгадали Лоренцево уравнение с его кажущимся
исчезновением времени и возрастанием массы при скорости света. Еще шаг — и было понято
нуль-пространство, как граница между миром и антимиром, между миром Шакти и Тамасом,
где взаимно уравновешены и нейтрализованы полярные точки пространства, времени и
энергии. Нуль-пространство тоже скручено в спираль соответственно обоим мирам, но… —
Юноша запнулся. — Я еще не смог сообразить, как возникает возможность передвигаться в
нем, почти мгновенно достигая любой точки нашей вселенной. Мне объяснили это
приближенно, что звездолет прямого луча идет не по спиральному ходу света, а как бы поперек
него, по продольной оси улитки, используя анизотропию пространства. Кроме того, звездолет в
отношении времени как бы стоит на месте, а вся спираль мира вращается вокруг него… —
Кими, краснея, беспомощно помотал головой под смех своих товарищей.


 
имя   (2007-10-07 22:23) [13]

Удалено модератором


 
Nucer   (2007-10-08 13:46) [14]


> Инс (07.10.07 21:49) [11]
> Лично я пользуюсь вот этим:http://www.submanifold.be/triade/GInt/gint.
> html

У меня есть строки sM - модуль (128 байт) и sE - экспонента (4 байта).
Есть блок данных 128 байт (pck).

var
sM,sE:string;
e,m:TFGInt;
pck,res:string;
begin
...
Base256StringToFGInt(sM,m);
Base256StringToFGInt(sE,e);
RSAEncrypt(pck,e,m,res);
end;

Получаю ошибку в функции RSAEncrypt (AccessViolation)


 
Инс ©   (2007-10-08 13:55) [15]


> Nucer   (08.10.07 13:46) [14]

А в каком виде у вас sM и sE? Число в строковом представлении, типа "12334435" или некий бинарный буфер?


 
Nucer   (2007-10-08 14:09) [16]

Бинарный буфер

procedure TForm1.btnRandomClick(Sender: TObject);
var
pck,res,sM,sE:string;
i:integer;
m,e:TFGInt;
begin
Randomize;
sM:="";
for i:=1 to 128 do sM:=sM+chr(random(256));
sE:=#1#0#0#0#1;
pck:="";
for i:=1 to 128 do pck:=pck+chr(random(256));

Base256StringToFGInt(sM,m);
Base256StringToFGInt(sE,e);
RSAEncrypt(pck,e,m,res);

PrintPck(pck,m1.Lines);
PrintPck(res,m2.Lines);
end;

При чем выдает ошибку не всегда


 
Инс ©   (2007-10-08 14:11) [17]


> Nucer   (08.10.07 14:09) [16]

А почему для алгоритма RSA вы модуль генерируете случайным образом? Это должно быть произведение двух больших простых чисел.


 
Инс ©   (2007-10-08 14:13) [18]

Возьмите хотя бы вот этот генератор
http://www.delphikingdom.com/zip/RSAToo2v17.zip

и сгенерируйте правильные числа d,q,e,n.


 
Slym ©   (2007-10-08 14:18) [19]

Инс ©   (07.10.07 21:49) [11]
тоже пользовался... - самый быстрый из аналогов т.к. оперирует интегером а не как у всех байтом
НО скорость можно еще поднять оптимизируя исходник, а неоптимальностей там навалом особенно в работе с памятью. Сам в свое время ее переработал на некоторых операциях спидап в разы.
но это все поделки... лучше пользовать виндовый криптоАПИ


 
Slym ©   (2007-10-08 14:20) [20]

Инс ©   (08.10.07 14:13) [18]
TFGInt - свой генератор есть


 
Nucer   (2007-10-08 14:21) [21]

Взял реальный ключ. Ошибки нет. Но возник вопрос - почему длина зашифрованных данных - 256 байт, когда изначально берется блок данных в 128 байт?


 
Nucer   (2007-10-08 14:23) [22]

Ведь шифрованный блок - это остаток от деления на модуль (а его длина именно 128 байт).


 
Инс ©   (2007-10-08 14:25) [23]


> Nucer   (08.10.07 14:21) [21]

Насколько я понимаю, длина шифртекста в RSA не может быть меньше длины ключа, хотя возможно ошибаюсь.


 
Nucer   (2007-10-08 14:30) [24]

Так в том и дело, что ключ - 128 байт, данные - 128 байт, а результат - 256 байт (при чем первые 128 практически всегда одинаковые).


 
Nucer   (2007-10-08 15:04) [25]

Вот функция RSAEncrypt:
Procedure RSAEncrypt(P : String; Var exp, modb : TFGInt; Var E : String);
Var
  i, j, modbits : longint;
  PGInt, temp, zero : TFGInt;
  tempstr1, tempstr2, tempstr3 : String;
Begin
  Base2StringToFGInt("0", zero);
  FGIntToBase2String(modb, tempstr1);
  modbits := length(tempstr1);
  convertBase256to2(P, tempstr1);
  tempstr1 := "111" + tempstr1;
  j := modbits - 1;
  While (length(tempstr1) Mod j) <> 0 Do tempstr1 := "0" + tempstr1;
     messagebox(0,PChar(IntToStr(length(tempstr1))),"",0);
  j := length(tempstr1) Div (modbits - 1);
  tempstr2 := "";
  For i := 1 To j Do
  Begin
     tempstr3 := copy(tempstr1, 1, modbits - 1);
     While (copy(tempstr3, 1, 1) = "0") And (length(tempstr3) > 1) Do delete(tempstr3, 1, 1);
     Base2StringToFGInt(tempstr3, PGInt);
     delete(tempstr1, 1, modbits - 1);
     If tempstr3 = "0" Then FGIntCopy(zero, temp) Else FGIntMontgomeryModExp(PGInt, exp, modb, temp);
     FGIntDestroy(PGInt);
     tempstr3 := "";
     FGIntToBase2String(temp, tempstr3);
     While (length(tempstr3) Mod modbits) <> 0 Do tempstr3 := "0" + tempstr3;
     tempstr2 := tempstr2 + tempstr3;
     FGIntdestroy(temp);
  End;

  While (tempstr2[1] = "0") And (length(tempstr2) > 1) Do delete(tempstr2, 1, 1);
  ConvertBase2To256(tempstr2, E);
  FGIntDestroy(zero);
End;

Зачем интересно к моему блоку данных добавляются 3 единицы


 
Nucer   (2007-10-08 15:07) [26]

В итоге к блоку данных добавляются 3 бита, а потом он добивается нулями до кратности length(modb)-1


 
Инс ©   (2007-10-08 15:09) [27]


> Зачем интересно к моему блоку данных добавляются 3 единицы

Честное слово не помню тонкости реализации RSA, почитать можно где угодно, возможно размер блока данных должен быть кратен чему-то, если нет - к нему добавляется хвостик. А какая собственно разница! Шифровка/расшифровка работает?


 
Nucer   (2007-10-08 15:09) [28]

Зачем интересно было устраивать эту самодеятельность...


 
Инс ©   (2007-10-08 15:11) [29]


> Зачем интересно было устраивать эту самодеятельность...

Видимо это неспроста. Значит это кому-нибудь нужно (с).


 
Nucer   (2007-10-08 15:12) [30]

Мое приложение должно только шифровать данные и передавать серверу, написанному на java и использующему режим ECB nopadding.
Тут же алгоритм RSAEncrypt написан так, чтобы шифровать данные различной длины и для этого он в данные добавляет метки, чтобы собственная процедура RSADecrypt могла вырезать лишний мусор и восстановить данные.


 
Инс ©   (2007-10-08 15:15) [31]


> Тут же алгоритм RSAEncrypt написан так, чтобы шифровать
> данные различной длины и для этого он в данные добавляет
> метки, чтобы собственная процедура RSADecrypt могла вырезать
> лишний мусор и восстановить данные.

Ну вот, вы сами на свой вопрос ответили. Не уверен, что именно то, что вам нужно, но может вам в сторону OpenPGP посмотреть?


 
Nucer   (2007-10-08 16:12) [32]

Инс, огромная благодарность за помощь. Обошелся в итоге вызовом FGIntMontgomeryModExp (правда данные перевернуть пришлось). Я аж удивился, когда сервер принял пакет и отправил ответ.


 
Инс ©   (2007-10-08 16:14) [33]


> Nucer   (08.10.07 16:12) [32]

Да не за что, Вы сами все сделали :)


 
Vendict ©   (2007-10-08 17:05) [34]


> но это все поделки... лучше пользовать виндовый криптоАПИ


вот не стоит ... я столько там граблей словил, особенно с ключевой информацией.

а по сабжу: ища модули для реализации российского ЭЦП наткнулся на FGInt.
в архиве лежит можуль FGIntRSA и пример на free-pascal"e. если не найдёшь - постучи в асю, вышлю.


 
Инс ©   (2007-10-08 17:07) [35]


> Vendict ©   (08.10.07 17:05) [34]

Чукча не читатель? :) А мы тут разве не о FGInt?


 
Vendict ©   (2007-10-08 17:11) [36]


> Чукча не читатель? :)


есть местами )
сейчас привыкну к новому клиенту, стану читателем. )



Страницы: 1 вся ветка

Текущий архив: 2007.11.11;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.035 c
2-1192530303
Dark_blue
2007-10-16 14:25
2007.11.11
Алгоритм шифрования


15-1191704974
яблочго
2007-10-07 01:09
2007.11.11
GIF овский TImage


6-1165172528
Yegorchic
2006-12-03 22:02
2007.11.11
Перехват запуска соединение по dial-up


4-1178292742
I-New
2007-05-04 19:32
2007.11.11
GDI+


15-1191322414
dumka
2007-10-02 14:53
2007.11.11
Юридический вопрос