Какой алгоритм шифрования следует использовать для шифрования текста как текста n FreePascal / Delphi? - PullRequest
1 голос
/ 18 июля 2010

Мне нужно зашифровать некоторый текст в моей программе, разработанной с использованием Lazarus / Freepascal, но я должен иметь возможность загружать их как текст и расшифровывать, а не в двоичном виде, потому что мне нужно сохранять их в свойстве типа TStrings.

Какой алгоритм (ы) подходит для этого?

Ответы [ 3 ]

6 голосов
/ 18 июля 2010

Используйте любое подходящее шифрование, а затем используйте MIME-кодирование base64, чтобы превратить его в обычную строку, которую можно сохранить в обычной строке.

2 голосов
/ 19 июля 2010

Правильный ответ: не делай этого. Не выбирайте алгоритм, который шифрует текст в текст.

Вам нужно сделать 2 шага:

  1. Шифрование (чип текст).
  2. Кодировка (преобразовать двоичный результат в текст).

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

Как преобразовать двоичный файл в текст?

1). Например, вы можете просто избегать плохих символов, поэтому TStrings не будут перепутаны. Выберите специальный символ. Например: # 1.

Теперь, чтобы закодировать строку, замените все # 1 -> # 1 # 2, # 0 -> # 1 # 3, # 13 -> # 1 # 4, # 10 -> # 1 # 5. Этого должно быть достаточно, чтобы TStrings принял это без проблем.

Для декодирования - сделать в обратном порядке: заменить # 1 # 5 -> # 10, # 1 # 4 -> # 13, # 1 # 3 -> # 0, # 1 # 2 -> # 1.

2). В качестве альтернативы, вы можете использовать Base64, как указал mj2008. Base64 - это общеизвестный стандарт. Однако он создает более раздутый текст (по сравнению с предыдущим методом) и может работать немного медленнее (сложное кодирование вместо простой логики поиска и замены).

3). Или вы можете просто написать каждый байт как 2 символа: то есть написать шестнадцатеричный код каждого байта (как это делает BinToHex). Это даже более раздутый, чем base64 (но может быть и самый быстрый), но у него есть преимущество, которое легче реализовать, чем любой другой метод. Вам даже не нужно писать много кода, поскольку в Delphi уже есть подпрограммы BinToHex / HexToBin.

0 голосов
/ 18 июля 2010

Afaik очень популярный пакет Delphi dcpcrypt2 отлично работает на FPC / Lazarus.

http://www.cityinthesky.co.uk/cryptography.html

Я обычно использую Rijndael.

Freepascal имеет собственный модуль для кодирования MIME, который отлично работает, также в Delphi

...