Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2007.11.11;
Скачать: [xml.tar.bz2];

Вниз

Реализация 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.54 MB
Время: 0.042 c
2-1192795996
Sat
2007-10-19 16:13
2007.11.11
получить данные с сервера


2-1192729777
periskops
2007-10-18 21:49
2007.11.11
Определение прав пользователя


2-1192439470
Lamer666
2007-10-15 13:11
2007.11.11
Как обработать событие ONCLICK программно созданной кнопки?


2-1192506624
dmdel
2007-10-16 07:50
2007.11.11
Закрасить пиксель


6-1173451478
K@KTUS
2007-03-09 17:44
2007.11.11
Компоненты FastNet





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский