function EncodeBase64(const inStr: string): string;
function Encode_Byte(b: Byte): char;
const
Base64Code: string[64] =
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
begin
Result := Base64Code[(b and $3F)+1];
end;
var
i: Integer;
begin
i := 1;
Result := '';
while i < =Length(InStr) dobegin
Result := Result + Encode_Byte(Byte(inStr[i]) shr 2);
Result := Result + Encode_Byte((Byte(inStr[i]) shl 4) or (Byte(inStr[i+1]) shr 4));
if i+1 < =Length(inStr) then
Result := Result + Encode_Byte((Byte(inStr[i+1]) shl 2) or (Byte(inStr[i+2]) shr 6))
else
Result := Result + '=';
if i+2 < =Length(inStr) then
Result := Result + Encode_Byte(Byte(inStr[i+2]))
else
Result := Result + '=';
Inc(i, 3);
end;
end;
// Base64 decodingfunction DecodeBase64(const CinLine: string): string;
const
RESULT_ERROR = -2;
var
inLineIndex: Integer;
c: Char;
x: SmallInt;
c4: Word;
StoredC4: array[0..3] of SmallInt;
InLineLength: Integer;
begin
Result := '';
inLineIndex := 1;
c4 := 0;
InLineLength := Length(CinLine);
while inLineIndex < =InLineLength dobeginwhile (inLineIndex < =InLineLength) and (c4 < 4) dobegin
c := CinLine[inLineIndex];
case c of
'+' : x := 62;
'/' : x := 63;
'0'..'9': x := Ord(c) - (Ord('0')-52);
'=' : x := -1;
'A'..'Z': x := Ord(c) - Ord('A');
'a'..'z': x := Ord(c) - (Ord('a')-26);
else
x := RESULT_ERROR;
end;
if x < > RESULT_ERROR thenbegin
StoredC4[c4] := x;
Inc(c4);
end;
Inc(inLineIndex);
end;
if c4 = 4 thenbegin
c4 := 0;
Result := Result + Char((StoredC4[0] shl 2) or (StoredC4[1] shr 4));
if StoredC4[2] = -1 then Exit;
Result := Result + Char((StoredC4[1] shl 4) or (StoredC4[2] shr 2));
if StoredC4[3] = -1 then Exit;
Result := Result + Char((StoredC4[2] shl 6) or (StoredC4[3]));
end;
end;
end;
Пример программирования на Delphi, демонстрирующий реализацию процедур Base64-кодирования и декодирования.
Base64 - это схема кодирования, используемая для преобразования двоичных данных в текстовый формат, который может быть легко передан по интернету или храниться в базе данных. Основной целью этой процедуры является кодирование и декодирование строк с помощью алгоритма Base64.
Вот как это работает:
Функция EncodeBase64:
Она принимает строку в качестве входного параметра (inStr) и возвращает закодированную строку Base64.
Функция проходит по входной строке шагами по 3 символа, обрабатывая каждый группу из трех байт (24 бита) одновременно.
Для каждой группы из трех байт она извлекает четыре 6-битовых блока из оригинальных данных с помощью битовых операций (shr, shl и двоичного И).
Каждый из этих 6-битовых блоков соответствует индексу в наборе символов Base64 (массиве Base64Code, содержащем символы 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/').
Функция конкатенирует соответствующие символы Base64 для каждой группы из трех байт.
Если осталось меньше, чем три байта, функция добавляет символы '=' в конце.
Функция DecodeBase64:
Она принимает закодированную строку Base64 в качестве входного параметра (CinLine) и возвращает оригинальные декодированные данные в виде строки.
Функция проходит по входной строке шагами по 4 символа (или до конца строки).
Для каждой группы из четырех символов Base64 она извлекает три байта из закодированных данных с помощью битовых операций (shr, shl и двоичного И).
Декодированные данные конкатенируются в новую строку.
Если осталось меньше, чем четыре символа Base64, функция останавливается декодированием.
Пример вывода функции EncodeBase64:
Вход: "Hello World!"
Закодировано: "SGVsbG8gV29ybGQh"
```
А пример вывода функции DecodeBase64:
В статье описываются процедуры кодирования и декодирования алгоритмом Base64 на языке Паскаль.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.