Шифрование / дешифрование AES Delphi и PHP

Мое приложение Delphi использует TurboPower LockBox 3 для шифрования информации в виде открытого текста с помощью AES 256. Теперь я хочу расшифровать эту информацию с помощью PHP. Но TurboPower LockBox 3 имеет некоторые проблемы с совместимостью.

Пожалуйста, проверьте сообщение автора LockBox 3 здесь:

http://lockbox.seanbdurkin.id.au/tiki-view_forum_thread.php?comments_parentId=363&topics_offset=1

И похожий пост на Stackoverflow

Решение для безопасного шифрования пар ключей в Delphi и PHP?

В LockBox 3 во время шифрования вы устанавливаете пароль. Этот пароль затем используется в качестве начального числа для генерации ключа, и iv. Так мог ли кто-нибудь имитировать метод генерации ключей на стороне PHP? Или есть ли способ получить Key / IV, сгенерированный LockBox 3, и поместить его в свой PHP-код, чтобы файл можно было расшифровать?


person Madhur    schedule 27.08.2012    source источник


Ответы (1)


IV

Как было сказано ранее, к сообщению с зашифрованным текстом добавляется IV nonce. Чтобы получить его на стороне PHP, просто извлеките первые 8 байтов.

Ключи

Вам необходимо решить, будет ли общий секрет в формате строки пароля или в формате двоичного ключа. Симметричный класс Key (TSymetricKey) имеет метод SaveToStream (), который работает так, как вы ожидаете. Компонент TCodec имеет свойство Key, которое будет доступно после того, как вы установите шифр, режим цепочки и пароль.

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

person Sean B. Durkin    schedule 27.08.2012
comment
Итак, я попытался получить ключ, сгенерированный внутри LockBox 3, и, насколько я понимаю, генерируемый ключ находится в формате UTF16LE, и есть некоторые кодовые точки, которые не могут быть преобразованы в UTF8. Как мне это сделать? Любой обходной путь? - person Madhur; 27.08.2012
comment
Ключи бинарные. Можно сказать, что только строки находятся в UTF16 или UTF8. - person Sean B. Durkin; 28.08.2012
comment
Также в строке UTF16 нет кодовых точек, которые нельзя преобразовать в UTF8. Вот почему в UTF16 стоит буква U. Поищите это в Википедии. - person Sean B. Durkin; 28.08.2012
comment
Извините за незнание, проверил на вики. Разница только в том, как биты сгруппированы для представления кодовой точки. Положительным моментом является то, что теперь я могу расшифровать данные в php ПРЕДОСТАВЛЕНО, это кратно 16 байтам. Итак, я думаю, что схема заполнения сейчас создает помеху. Из ответа на это сообщение stackoverflow.com/questions/10847759/ кажется, что CBC использует кражу зашифрованного текста? - person Madhur; 28.08.2012
comment
Итак, есть ли способ заставить LockBox 3 не использовать CTS и вместо этого использовать более простую схему заполнения? Или мне нужно реализовать что-то описанное stackoverflow.com/questions/10411036/ на стороне PHP? - person Madhur; 28.08.2012
comment
Нет. CTS для вашего же блага. Выпейте лекарство. На стороне PHP либо реализуйте CTS (не сложно) с режимом цепочки без потоковой передачи ключей, например CBC, либо просто выберите режим цепочки потоковой передачи ключей, например OFB. С чем пойти? Это зависит от того, что поддерживает ваша криптографическая библиотека PHP. - person Sean B. Durkin; 28.08.2012
comment
PHP поддерживает режимы блочного шифрования как CBC, так и OFB. Если я решу реализовать CTS, шаги, определенные здесь правильно? - person Madhur; 28.08.2012
comment
Если это основано на странице википедии, то, вероятно. Я не буду рассматривать это подробно, если вы сначала не попробуете, и это не сработает. - person Sean B. Durkin; 29.08.2012