Реалізація RSA в Delphi
Уже другий день шукаю в інтернет реалізацію RSA на Delphi - нічого немає. Потрібен режим ECB nopadding. Може підкажіть - де таке знайти? Або краще не витрачати час даремно і почати вже самому вивчати літературу.
> Або краще не витрачати час даремно і почати вже самому вивчати
> Літературу.
Це корисніше в будь-якому випадку
> Вже другий день шукаю в інтернет реалізацію RSA на Delphi
> - нічого немає.
на torry.net дивився? Там компонентів і модулів для криптографії як бруду.
Компоненти LockBox. RSA і багато іншого
або проект і так хороший, або погано.
Саме -то користувався?
Ок, Сергій, спасибі за інформацію. Буду знати.
> Sergey Masloff # XA0; (07.10.07 13:50) [4]
Так, у них там багато компонентів серії TurboPower.
Я також щаметіл, що вони пишуть - вихідні відкриті, але це не опенсорс. Я так зрозумів, що мається на увазі, що вихідні беріть, але не дописуйте в рамках ОС проекту. Так?
Тобто (Підведу підсумок) це професійні компоненти того часу, які були викладені в загальний доступ через припинення їх продажу і розробки оригінальним виробником. Так?
Тобто компонентам можна вірити.
> Тобто компонентам можна вірити.
AsyncPro # 151; ниче так, я користуюся для RS 485 # 133
> А не мертвенькій чи проект? все таки 4.5 роки тому реліз
> Був останній.
Власне, нині алгоритм RSA такий же, як і 4.5 роки тому, так що нічого страшного :)
> LockBox
компоненти хороші, сам використовую в парі проектів, але тільки для хешування, тому що швидкість генерації ключів неахті ..
- До речі, про галактиках. Їх класичні спіральні форми були відомі ще першим
винахідникам телескопів, - розповідав Кімі, - але треба було кілька століть,
щоб зрозуміти в них реальне відображення структури всесвіту - волокон, або, вірніше, пластів,
нашого світу, перешарованого з Тамасом і разом з ним закрученого в безконечну спіраль. І
окремі елементи, від галактик до атомів, на кожному щаблі мають свої особливі властивості
загальних законів. Виявилося, що світло і інші випромінювання ніколи не поширюються у
всесвіту прямолінійно, а намотуються на спіраль, одночасно ковзаючи по гелікоїду і все
більше розвертаючись у міру віддалення від спостерігача. Дістали пояснення і стиснення і
розтягування світлових хвиль з скороченням їх при входженні в глибину спіралі і позірна
розбігання зірок і галактик в далеких витках. Розгадали Лоренцеве рівняння з його удаваним
зникненням часу і зростанням маси при швидкості світла. Ще крок - і став зрозумілим
нуль-простір, як межа між світом і антисвіту, між світом Шакті і Тамасом,
де взаємно врівноважені і нейтралізовані полярні точки простору, часу і
енергії. Нуль-простір також скручено в спіраль відповідно до обох світів, але ... -
Юнак запнувся. - Я досі не можу збагнути, як виникає можливість пересуватися в
ньому, майже миттєво можна досягти будь-якої точки нашого всесвіту. Мені пояснили це
наближено, що зореліт прямого променя йде не по спіральним ходом світла, а як би поперек
нього, по поздовжній осі равлики, використовуючи анізотропію простору. Крім того, зореліт в
часі мовби стоїть на місці, а вся спіраль світу обертається навколо нього ... -
Кімі, червоніючи, безпорадно похитав головою під сміх своїх товаришів.
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)
> Nucer # XA0; (08.10.07 13:46) [14]
А в якому вигляді у вас sM і sE? Число в строковому поданні, типу "12334435" або якийсь бінарний буфер?
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));
PrintPck (pck, m1.Lines);
PrintPck (res, m2.Lines);
end;
При чому видає помилку не завжди
> Nucer # XA0; (08.10.07 14:09) [16]
А чому для алгоритму RSA ви модуль генеруєте випадковим чином? Це повинно бути твір двох великих простих чисел.
і згенеруйте правильні числа d, q, e, n.
Взяв реальний ключ. Помилки немає. Але виникло питання - чому довжина зашифрованих даних - 256 байт, коли спочатку береться блок даних в 128 байт?
Адже шифрований блок - це залишок від ділення на модуль (а його довжина саме 128 байт).
> Nucer # XA0; (08.10.07 14:21) [21]
Наскільки я розумію, довжина шифртекста в RSA не може бути менше довжини ключа, хоча можливо помиляюся.
Так в тому і справа, що ключ - 128 байт, дані - 128 байт, а результат - 256 байт (при чому перші 128 практично завжди однакові).
# XA0; While (tempstr2 [1] = "0") And (length (tempstr2)> 1) Do delete (tempstr2, 1, 1);
# XA0; ConvertBase2To256 (tempstr2, E);
# XA0; FGIntDestroy (zero);
End;
Навіщо цікаво до мого блоку даних додаються 3 одиниці
У підсумку до блоку даних додаються 3 біта, а потім він домагається нулями до кратності length (modb) -1
> Навіщо цікаво до мого блоку даних додаються 3 одиниці
Чесне слово не пам'ятаю тонкощі реалізації RSA, почитати можна де завгодно, можливо розмір блоку даних повинен бути кратний чогось, якщо немає - до нього додається хвостик. А яка власне різниця! Шифрування / розшифровка працює?
Навіщо цікаво було влаштовувати цю самодіяльність.
> Навіщо цікаво було влаштовувати цю самодіяльність.
Мабуть це неспроста. Значить це комусь потрібно (с).
Моє додаток має тільки шифрувати дані і передавати серверу, написаному на java і використовує режим ECB nopadding.
Тут же алгоритм RSAEncrypt написаний так, щоб шифрувати дані різної довжини і для цього він в дані додає мітки, щоб власна процедура RSADecrypt могла вирізати зайвий сміття і відновити дані.
> Тут же алгоритм RSAEncrypt написаний так, щоб шифрувати
> Дані різної довжини і для цього він в дані додає
> Мітки, щоб власна процедура RSADecrypt могла вирізати
> Зайвий сміття і відновити дані.
Ну ось, ви самі на своє питання відповіли. Не впевнений, що саме те, що вам потрібно, але може вам в сторону OpenPGP подивитися?
Інс, велика подяка за допомогу. Обійшовся в результаті викликом FGIntMontgomeryModExp (правда дані перевернути довелося). Я аж здивувався, коли сервер прийняв пакет і відправив відповідь.
> Nucer # XA0; (08.10.07 16:12) [32]
Да не за что, Ви самі все зробили :)
> Але це все вироби. краще використовувати віндовий кріптоАПІ
от не варто. я стільки там граблів зловив, особливо з ключовою інформацією.
а по сабжу: шукаючи модулі для реалізації російського ЕЦП натрапив на FGInt.
в архіві лежить можуль FGIntRSA і приклад на free-pascal "e. якщо не знайдеш - постукай в асю, вишлю.
є місцями)
Зараз звикну до нового клієнта, стану читачем. )