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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.09.2011, 18:48   #1
nik-maximal
Пользователь
 
Аватар для nik-maximal
 
Регистрация: 09.03.2011
Сообщений: 16
Печаль

Как переделать вот эти функции
Код:
 
function EncodeBase64(Value: String): String;
const
 b64alphabet: PChar = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщьыъэюя0123456789+/';
  pad: PChar = '====';

               function EncodeChunk(const Chunk: String): String;
  var
    W: LongWord;
    i, n: Byte;
  begin
    n := Length(Chunk); W := 0;
    for i := 0 to n - 1 do
      W := W + Ord(Chunk[i + 1]) shl ((2 - i) * 8);
    Result := b64alphabet[(W shr 18) and $3f] +
              b64alphabet[(W shr 12) and $3f] +
              b64alphabet[(W shr 06) and $3f] +
              b64alphabet[(W shr 00) and $3f];
    if n <> 3 then
      Result := Copy(Result, 0, n + 1) + Copy(pad, 0, 3 - n);   //add padding when out len isn't 24 bits
  end;

begin
  Result := '';
  while Length(Value) > 0 do
  begin
    Result := Result + EncodeChunk(Copy(Value, 0, 3));
    Delete(Value, 1, 3);
  end;
end;


function DecodeBase64(Value: String): String;
const b64alphabet: PChar = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщьыъэюя0123456789+/';
  function DecodeChunk(const Chunk: String): String;
  var
    W: LongWord;
    i: Byte;
  begin
    W := 0; Result := '';
    for i := 1 to 4 do
      if Pos(Chunk[i], b64alphabet) <> 0 then
        W := W + Word((Pos(Chunk[i], b64alphabet) - 1)) shl ((4 - i) * 6);
    for i := 1 to 3 do
      Result := Result + Chr(W shr ((3 - i) * 8) and $ff);
  end;
begin
  Result := '';
  if Length(Value) mod 4 <> 0 then Exit;
  while Length(Value) > 0 do
  begin
    Result := Result + DecodeChunk(Copy(Value, 0, 4));
    Delete(Value, 1, 4);
  end;
end;
чтобы они работали в delphi 2010 . Символы на английском и/или цифры нормально шифруются, а русские символы не фига не хотят. Или предложите другой способ шифрования с исходным кодом

Я на сколько понял это из за того что с версии 2009 полностью перешел на юникод, а исходник делался в предыдущих версия

Последний раз редактировалось Stilet; 22.09.2011 в 08:48.
nik-maximal вне форума Ответить с цитированием
Старый 21.09.2011, 19:17   #2
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Если в лоб:

PChar -> PAnsiChar
String -> AnsiString
Char -> AnsiChar

Если по-умному - зависит от условий. Надо ли совместимость со старыми данными и т.п.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 21.09.2011, 23:34   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Символы на английском и/или цифры нормально шифруются
добавлю, что это никакое не шифрование!
Это КОДИРОВАНИЕ информации.
алгоритм кодирования BASE64 к шифрованию никакого отношения не имеет.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.09.2011, 05:59   #4
nik-maximal
Пользователь
 
Аватар для nik-maximal
 
Регистрация: 09.03.2011
Сообщений: 16
По умолчанию

простите перепутал
nik-maximal вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Word 2010 и Delphi 2010 David023 Мультимедиа в Delphi 1 30.04.2011 15:51
Шифрование поблочно, Delphi Petr1K Помощь студентам 3 20.12.2010 13:31
GlScene и Embarcadero Rad Studio 2010 (Delphi 2010) Fiery Fox Мультимедиа в Delphi 4 19.11.2010 21:46
Delphi / простейшее шифрование FCSM Помощь студентам 3 19.04.2010 15:48
Шифрование в delphi Ensoph Помощь студентам 3 20.03.2009 15:18