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

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

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

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

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

const
   Codes64 = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/';

 function Encode64(S: string): string;
 var
   i: Integer;
   a: Integer;
   x: Integer;
   b: Integer;
 begin
   Result := '';
   a := 0;
   b := 0;
   for i := 1 to Length(s) do
   begin
     x := Ord(s[i]);
     b := b * 256 + x;
     a := a + 8;
     while a >= 6 do
     begin
       a := a - 6;
       x := b div (1 shl a);
       b := b mod (1 shl a);
       Result := Result + Codes64[x + 1];
     end;
   end;
   if a > 0 then
   begin
     x := b shl (6 - a);
     Result := Result + Codes64[x + 1];
   end;
 end;

 function Decode64(S: string): string;
 var
   i: Integer;
   a: Integer;
   x: Integer;
   b: Integer;
 begin
   Result := '';
   a := 0;
   b := 0;
   for i := 1 to Length(s) do
   begin
     x := Pos(s[i], codes64) - 1;
     if x >= 0 then
     begin
       b := b * 64 + x;
       a := a + 6;
       if a >= 8 then
       begin
         a := a - 8;
         x := b shr a;
         b := b mod (1 shl a);
         x := x mod 256;
         Result := Result + chr(x);
       end;
     end
     else
       Exit;
   end;
 end;

Вот перевод текста на русский язык:

Константы Константа Codes64 - строка, содержащая все 64 возможные символа, используемые в алгоритме Base64 кодирования.

Функция Encode64 Эта функция принимает строковый ввод S и возвращает его представление в виде Base64-кодированной строки. 1. Инициализируйте пустую строку Result. 2. Инициализируйте переменные a и b равными 0. 3. Перейдите по каждому символу входной строки s с помощью цикла for. 4. Для каждого символа, вычислите его код ASCII с помощью Ord(s[i]). 5. Преобразуйте это значение в двоичное представление, умножив его на 256 (x := b * 256 + x) и храните его в b. Увеличьте a на 8 (поскольку мы обрабатываем 8-битные блоки). 6. Пока a больше или равно 6, выполните следующие шаги: * Отнимите 6 от a. * Разделите b на (1 shl a) (сдвиг влево) и храните его в x. Это дает нам первые 6 бит двоичного представления. * Взять остаток от деления b на (1 shl a) и храните его в b. Это дает нам оставшиеся биты двоичного представления. * Добавьте символ, соответствующий x + 1, из строки Codes64, к результату (Result := Result + Codes64[x + 1]). 7. Если a все еще больше или равно 0 после цикла, это означает, что у нас есть оставшиеся биты в b. Сдвиньте их влево на (6 - a) и добавьте соответствующий символ к результату.

Функция Decode64 Эта функция принимает строковый ввод S в виде Base64-кодированной строки и возвращает его оригинальное представление в виде строки. 1. Инициализируйте пустую строку Result. 2. Инициализируйте переменные a и b равными 0. 3. Перейдите по каждому символу входной строки s с помощью цикла for. 4. Для каждого символа, найдите его индекс в строке Codes64, минус 1 (x := Pos(s[i], codes64) - 1). Если этот индекс недопустим (т.е., меньше 0), выйдите из функции. 5. Преобразуйте индекс в двоичное представление, умножив его на 64 (b := b * 64 + x) и храните его в b. Увеличьте a на 6 (поскольку мы обрабатываем 6-битные блоки). 6. Пока a больше или равно 8, выполните следующие шаги: * Отнимите 8 от a. * Сдвиньте вправо b на a бит и взять остаток как новый значение для x. Это дает нам первые 8 бит двоичного представления. * Взять остаток от деления b на (1 shl a) и храните его в b. Это дает нам оставшиеся биты двоичного представления. * Преобразуйте это двоичное представление в символ ASCII с помощью chr(x). Добавьте этот символ к результату (Result := Result + chr(x)). 7. Возвращает декодированную строку.

Обратите внимание, что обе функции используют битовые операции (сдвиги и деления) для обработки двоичных представлений символов входной строки. Это общая техника в алгоритмах Base64 кодирования/декодирования.

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


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

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




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


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


реклама


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

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 13:25:54/0.0055110454559326/1