Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

64-битное кодирование 3

Delphi , Синтаксис , Шифрование



Автор: http://www.swissdelphicenter.ch

function Decode(const S: AnsiString): AnsiString;
const
  Map: array[Char] of Byte = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 63, 52, 53,
    54, 55, 56, 57, 58, 59, 60, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2,
    3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
    20, 21, 22, 23, 24, 25, 0, 0, 0, 0, 0, 0, 26, 27, 28, 29, 30,
    31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
    46, 47, 48, 49, 50, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0);
var
  I: LongInt;
begin
  case Length(S) of
    2:
      begin
        I := Map[S[1]] + (Map[S[2]] shl 6);
        SetLength(Result, 1);
        Move(I, Result[1], Length(Result))
      end;
    3:
      begin
        I := Map[S[1]] + (Map[S[2]] shl 6) + (Map[S[3]] shl 12);
        SetLength(Result, 2);
        Move(I, Result[1], Length(Result))
      end;
    4:
      begin
        I := Map[S[1]] + (Map[S[2]] shl 6) + (Map[S[3]] shl 12) +
          (Map[S[4]] shl 18);
        SetLength(Result, 3);
        Move(I, Result[1], Length(Result))
      end
  end
end;

function Encode(const S: AnsiString): AnsiString;
const
  Map: array[0..63] of Char = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' +
  'abcdefghijklmnopqrstuvwxyz0123456789+/';
var
  I: LongInt;
begin
  I := 0;
  Move(S[1], I, Length(S));
  case Length(S) of
    1:
      Result := Map[I mod 64] + Map[(I shr 6) mod 64];
    2:
      Result := Map[I mod 64] + Map[(I shr 6) mod 64] +
        Map[(I shr 12) mod 64];
    3:
      Result := Map[I mod 64] + Map[(I shr 6) mod 64] +
        Map[(I shr 12) mod 64] + Map[(I shr 18) mod 64]
  end
end;

Here is the translation of the text into Russian:

Функция декодирования

Функция Decode принимает строку ANSI в качестве входного параметра и возвращает декодированную версию этой строки. Функция использует таблицу соответствий (Map) для маппинга символов Base64 к их соответствующим байтовым значениям.

Функция проверяет длину входной строки и выполняет следующие операции в зависимости от длины:

  • Если длина равна 2, функция извлекает два символа из входной строки, конвертирует их в байтовые значения с помощью таблицы соответствий (Map) и комбинирует их в единое целое (I). Затем она создает строку вывода с одним символом и перемещает декодированное значение к этому символу.
  • Если длина равна 3, функция извлекает три символа из входной строки, конвертирует их в байтовые значения с помощью таблицы соответствий (Map) и комбинирует их в единое целое (I). Затем она создает строку вывода с двумя символами и перемещает декодированное значение к этим символам.
  • Если длина равна 4, функция извлекает четыре символа из входной строки, конвертирует их в байтовые значения с помощью таблицы соответствий (Map) и комбинирует их в единое целое (I). Затем она создает строку вывода с тремя символами и перемещает декодированное значение к этим символам.

Функция кодирования

Функция Encode принимает строку ANSI в качестве входного параметра и возвращает кодированную версию этой строки. Функция использует таблицу соответствий (Map) для маппинга байтовых значений к их соответствующим символам Base64.

Функция инициализирует переменную I в 0 и затем перемещает входную строку в эту переменную. Затем она проверяет длину входной строки и выполняет следующие операции в зависимости от длины:

  • Если длина равна 1, функция извлекает первый символ из входной строки, конвертирует его в байтовое значение с помощью таблицы соответствий (Map) и комбинирует его с вторым байтовым значением (которое получается путем смещения первого байтового значения на 6 бит влево). Затем она создает строку вывода с двумя символами.
  • Если длина равна 2, функция извлекает два символа из входной строки, конвертирует их в байтовые значения с помощью таблицы соответствий (Map) и комбинирует их в единое целое (I). Затем она создает строку вывода с тремя символами.
  • Если длина равна 3, функция извлекает три символа из входной строки, конвертирует их в байтовые значения с помощью таблицы соответствий (Map) и комбинирует их в единое целое (I). Затем она создает строку вывода с четырьмя символами.
  • В целом, это код реализует алгоритмы Base64-кодирования и декодирования, как указано в RFC 4648.

В статье описан алгоритм кодирования и декодирования с использованием 64-битного кода.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




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


:: Главная :: Шифрование ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-28 06:21:37/0.003262996673584/0