Перейти к содержанию
Fire Monkey от А до Я

[XE8][Win][Android] AES-256 Шифрование и LockBox


Рекомендуемые сообщения

Здравствуйте.

Есть ли встроенные возможности в FMX пои шифрованию?

А то через GetIt скачал LockBox, но примеров толковых нету. Точнее вообще почти ничего нету.

Пробовал MD5 создать хотя бы, но выдает что то не то. Пробовал и AES-256 но результат не совпадает с тем что выдают онлайн сервисы.

 

Так что может просто есть в самом FMX возможность стряпать MD5 и AES-256 (с указанием вектора)?

Ссылка на комментарий
  • Модераторы

Давайте я попробую вам помочь.

Открываем справку, вбиваем с строку поиска "MD5" и ... вот такой вот результат есть: http://docwiki.embarcadero.com/Libraries/XE8/en/System.Hash

 

с AES-256 посложнее будет... сейчас попробую найти модуль, который недавно видел.

 

 

Ап. Что-то не нахожу... попадается один ЛокБокс, может я его и видел...

 

Ап 2. Вот такой есть ещё компонент, но не известно будет ли работать в XE5+: DCPcrypt

Изменено пользователем Andrey Yefimov
Локбокс
Ссылка на комментарий

Результаты которые выдает ЛокБокс, не будут совпадать с остальными, не ясно почему, но ребята из локбокс не совсем верно реализовали алгоритм дополнения\обрезки блока (он работает, но реализован не так как описано в алгоритмах шифрования). Мы свою серверную часть написанную на C# фактически подгоняли под это безобразие.

Ссылка на комментарий

Согласен. Криптостойкость может упасть.

Тогда если вы разбираетесь, подскажите пожалуйста кое что.

Вот на этом сайте http://crypt-online.narod.ru/crypts/aes если шифровать какой либо текст (например "тест")

то каждый раз новый результат, кроме начала:

U2FsdGVkX185HglNrSAfqMcXTu7sdecS7MdyYMUZv48=
U2FsdGVkX19GCq2mEW0kSfgU5G7jeTo/ZrYmJwyJXRE=
U2FsdGVkX18VkSB06L2YyrsQet15YeHGm0hykA3mukA=
U2FsdGVkX1+R/DUYUkLzhanBXQXMboeF31pnaX5ZsBo=
 
В принципе на многих онлайн сайтах похожий результат (может либа одна и та же)
 
А вот если скачать приложение для Андроид, то там кодированный текст, не меняется, если пароль и текст одни и те же.
 
Так вот у меня вопрос, что это за "U2FsdGVkX1" выходит на этих сайтах?
Должна ли формироваться каждый раз новая строка при шифровании или же должна быть одна и та же?
 
И когда пишут про связку AES-256+base64+salt что они солят?
Ссылка на комментарий

Честно говоря, никогда не разбирался с AES'ом. Я раньше юзал ГОСТ 28147-89. Сам его реализовал на делфях со вставками асемблера, ибо без него скорость шифрования и расшифрования была катастрафически мала(со вставками скорость выросла на 2 или 3 порядка, точно не помню). Результат всегда получался одинаковый при шифровании одного и того же содержимого и одного и того же ключа. Что там в этом AES'е х... фиг его знает.

Ссылка на комментарий

Если дешифровать функцией той же либы, то да, всё верно.

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

Ссылка на комментарий

Кривая реализация стандарта может очень сильно ударить по стойкости шифрования.

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

Ссылка на комментарий

Я тоже пару месяцев назад разбирался с локбоксом, получилось зашифровать текст симметричным и несимметричным алгоритмами. Только расшифровывается все это только этой же библиотекой. Другие не подходят. Начал копать в чем причина и вроде нашел. Сами создатели локбокса пишут, что алгоритмы шифрования (во всяком случае асимметричные) не дают четкого математического метода шифрования, а дают как бы рекомендации. И каждый реализует его на свое усмотрение. Поэтому 2 разные библиотеки дают разный результат.

 

Так что если кто-нибудь знает единую библиотеку, чтобы организовать двустороннее шифрование FMX(Win+MacOS)-Java поделитесь, пожалуйста))

Ссылка на комментарий

Я сейчас уже точно не скажу. Либо AES, либо DES. С одним у меня что-то не срасталось, а второй заработал. Но потом, когда я узнал, что расшифровать можно только локбоксом, я расстроился и начал ковыряться с симметричным шифрованием (TwoFish), потом и насчет него тоже расстроился, изобрел очередной велосипед и успокоился.

Ссылка на комментарий

var
s: string;

procedure Code(var text: string; password: string;
decode: boolean);
var
i, PasswordLength: integer;
sign: shortint;
begin
PasswordLength := length(password);
if PasswordLength = 0 then Exit;
if decode
then sign := -1
else sign := 1;
for i := 1 to Length(text) do
text := chr(ord(text) + sign *
ord(password[i mod PasswordLength + 1]));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
s := Memo1.Text;
code(s, Edit1.Text, false);
Memo1.Text := s;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
code(s, Edit1.Text, true);
Memo1.Text := s;
end;

Ссылка на комментарий

Я использую это, подходит и для андроид и для виндовс, на остальных не пробовал. Но при сохранении зашифрованного текста в файл, вместо символов - вопросительные знаки. Как это решить? Пробовал так:

var
s: string;

procedure Code(var text: string; decode: boolean);
begin
  if decode
  then sign := -1
  else sign := 1;
  text := chr(ord(text) + sign *
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  s := Memo1.Text;
  code(s, false);
  Memo1.Text := s;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  code(s, true);
  Memo1.Text := s;
end;

Но это очень просто, любой знаток может расшифровать.

Ссылка на комментарий
  • 4 месяца спустя...

Delphi-to-PHP Symetric Cipher Tutorial     SVN     - вот рабочее решение для симметричного шифрования. Эту же библиотеку юзаю и для асимметричного. А вообще, теперь в TPLockBox, вроде, есть поддержка OpenSSL, значит, в теории можно этим OpenSSL-ом шифровать и всё будет совместимо.

 

DCPcrypt вроде как умер, а последняя бета, подправленная для работы в XE7+, у меня выдавала неверный SHA1, например. Шифровать ею не пробовал.

Ссылка на комментарий

длина то на андройдовскую подправлена?

 

если например в винде делали так

 for I:=1 to Length(Value) do
  begin
  Result:=Chr(Ord(Value)+Ord(Code[X]));
  Inc(X);
  end;

 

то в андройде она начинается на 1 раньше

 

 for I:=0 to Length(Value)-1 do
  begin
  Result:=Chr(Ord(Value)+Ord(Code[X]));
  Inc(X);
  end;

Ссылка на комментарий
  • 5 месяцев спустя...

Есть старый проект на Delphi 7, в нем используется dll.

Решил в частности эту dll перевести на Delphi RX. После танцев с бубном она скомпилировалась и вроде как работает... за исключением одного момента: в ней используется AES-128 - шифруются/дешифруются TCP пакеты и видимо после переноса в RX шифруются неправильно.

Используются obj-файлы, скомпилированные в BCC55 :huh: (исходники на C имеются)

unit UAES;

interface
const
  BlockSize = 16;               
  KsLength = 4*BlockSize;
  AesContextSize = 4*KsLength+4*3;

type
 TAesContext = packed array[0..AesContextSize-1] of byte;

function aes_set_encrypt_key (const Key : PChar; KeyLen : cardinal; var AesContext : TAesContext) : cardinal; external;
function aes_encrypt_block (const Ib; var Ob; const AesContext : TAesContext) : cardinal; external;

function aes_set_decrypt_key (const Key : PChar; KeyLen : cardinal; var AesContext : TAesContext) : cardinal; external;
function aes_decrypt_block (const Ib; var Ob; const AesContext : TAesContext) : cardinal; external;



implementation
{$L fileenc.obj}
{$L aescrypt.obj}
{$L aeskey.obj}
{$L aestab.obj}
{$L pwd2key.obj}
{$L prng.obj}
{$L hmac.obj}
{$L sha1.obj}

procedure _memset (var Dest; Value,Count : integer); cdecl;
begin
  FillChar (Dest,Count,chr(Value));
end;

procedure _memcpy (var Dest; const Source; Count : integer); cdecl;
begin
  Move (Source,Dest,Count);
end;

end.

Вопросы:

1. Почему шифрование перестало работать после переноса в RX?

2. Где найти библиотеку для шифрования пакетов в AES-128?

 

PS. Интересно C++Builder может скомпилировать C-код в obj?

Изменено пользователем Rusland
Ссылка на комментарий
5 часов назад, Rusland сказал:

haword, не подскажете где скачать для Delphi 10 Seattle?

Download: https://github.com/TurboPack/LockBox/archive/master.zip

https://github.com/TurboPack/LockBox

LockBox-master.zip

Изменено пользователем Сысоев Максим
Добавил архив. Добавил ссылку на гитхаб
Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...