Форум: "Прочее";
Текущий архив: 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…
← →
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.065 c