Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.05.2012, 10:59   #1
JekaDefer
Форумчанин
 
Регистрация: 07.04.2009
Сообщений: 112
По умолчанию Вопрос по Base64

Код:
function base64_encode(s: string): string;
const
  symb = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
var
  l: string;
  i: integer;
  k: byte;
begin
  l := '';
  i := 0;
  while i < length(s) do
  begin
    k := ord(s[1 + i]) shr 2;
    l := l + symb[k + 1];

    k := ord(s[1 + i]) shl 6;
    k := k shr 2 + ord(s[2 + i]) shr 4;
    l := l + symb[k + 1];

    k := ord(s[2 + i]) shl 4;
    k := k shr 2 + ord(s[3 + i]) shr 6;
    l := l + symb[k + 1];

    k := ord(s[3 + i]) shl 2;
    k := k shr 2;
    l := l + symb[k + 1];

    case length(s) - i of
      1:
        move(string('=='), l[length(l) - 1], 2);
      2:
        move(string('='), l[length(l)], 1);
    end;
    inc(i, 3);
  end;
  result := l;
end;

function base64_decode(s: string): string;
const
  symb = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
var
  l: string;
  i, j: integer;
  a: array[1..3] of byte;
  b: array[1..4] of byte;
begin
  l := '';
  i := 0;
  while i < length(s) do
  begin
    for j := 1 to 4 do
    begin
      b[j] := pos(s[j + i], symb);
      if b[j] > 0 then dec(b[j]);
    end;
    a[1] := (b[1] shl 2) and 255 + (b[2] shr 4) and 3;
    a[2] := (b[2] shl 4) and 255 + (b[3] shr 2) and 15;
    a[3] := (b[3] shl 6) and 255 + b[4];
    if s[3 + i] = '=' then
      l := l + chr(a[1])
    else
      if s[4 + i] = '=' then
        l := l + chr(a[1]) + chr(a[2])
      else
        l := l + chr(a[1]) + chr(a[2]) + chr(a[3]);
    inc(i, 4);
  end;
  result := l;
end;
Я может что то не понимаю но этому алгоритму что ли даже ключа не надо никакого? И любой сможет расшифровать сообщение?:-) Или константа Symb это и есть ключ?

Последний раз редактировалось JekaDefer; 14.05.2012 в 11:02.
JekaDefer вне форума Ответить с цитированием
Старый 14.05.2012, 11:07   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

base64 это не шифрование.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 14.05.2012, 11:17   #3
JekaDefer
Форумчанин
 
Регистрация: 07.04.2009
Сообщений: 112
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
base64 это не шифрование.
Блин а мне кто то тут тер что шифрует этим.. я и подумал что алгоритм шифрования.. ща ток в википедии прочитал
Цитата:
Base64 буквально означает — позиционная система счисления с основанием 64. Здесь 64 — это наибольшая степень двойки (26), которая может быть представлена с использованием печатных символов ASCII. Эта система широко используется в электронной почте для представления бинарных файлов в тексте письма (транспортное кодирование). Все широко известные варианты, известные под названием Base64, используют символы A-Z, a-z и 0-9, что составляет 62 знака, для недостающих двух знаков в разных системах используются различные символы.
JekaDefer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Base64 GoldmasteR Общие вопросы Delphi 10 06.01.2011 18:37
base64 beemoto Общие вопросы Delphi 0 24.04.2010 21:58
base64 Dimarik Win Api 0 10.04.2010 18:59
кодировать в base64 furstenberg Общие вопросы Delphi 13 29.08.2008 17:02
base64 BlackOmen Общие вопросы Delphi 2 02.05.2008 16:30