За службовим обов'язком в розробників зустрілася завдання шифрувати текстові рядки алгоритмом RSA, використовуючи публічний і секретний ключі в PEM форматі. При вивченні даного питання вибір припав на використання бібліотеки OpenSSL. Хочу поділитися прикладами реалізації функціоналу шифрування на Delphi. Дії виконувалися в ОС Windows, середовище розробки Borland Delphi 7.
З чого почати?
В першу чергу необхідний пакет openssl, а точніше бібліотека libeay32.dll. І для підключення бібліотеки нам знадобиться готовий юніт libeay32.pas. який необхідно підключити до проекту. У моєму прикладі відсутня функціонал генерації ключів з проекту, як це зробити можна буде почитати в матеріалі за посиланням знизу статті. Для генерації пари ключів я використовував сам openssl наступними командами з cmd:
Де тисячі двадцять-чотири є Бітність ключа. Зазначу, що від битности ключа залежить і довжина рядка для шифрування. Якщо ключ 1024 біта, то зашифрувати зможемо всього 128 байт, той самий розмір, якому дорівнює розміру ключа. Нижче покажу функцію, що визначають розмір структури RSA ключа. Але це не все. Даний буфер зменшиться на 11 байт, якщо під час шифрування вказати параметр padding. відповідального за вирівнювання даних - PKCS # 1.
Згенерувавши ключ в 2048 біт, зможемо зашифрувати 256 байт. При цьому збільшується розмір вихідного шифрованого тексту, навіть якщо буде зашифрований всього 1 байт.
Для моєї завдання було досить 117 байт, в які вміщалися карткові дані, розмір рядків в базі, звичайно ж, значно зріс. Але того вимагає безпека.
Основні функції
Основне, що ми будемо використовувати для шифрування, - це: