На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! user posted image
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.

Соблюдайте общие правила форума

Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как запустить программу/файл? (и дождаться ее завершения)
5. Как перехватить API-функции, поставить hook? (перехват сообщений от мыши, клавиатуры - внедрение в удаленное адресное прстранство)
... (продолжение следует) ...

Внимание:
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки - бан.
Мат в разделе - бан на три месяца...

Полезные ссылки:
user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


Выразить свое отношение к модераторам раздела можно здесь: user posted image Rouse_, user posted image Krid

Модераторы: Rouse_, Krid
Страницы: (3) 1 2 [3]  все  ( Перейти к последнему сообщению )  
> Алгоритм АЕS шифрование, расшифрование , Алгоритм АЕS шифрование, расшифрование
    Писать и читать файл как двоичный.
      Цитата mawa @
      А где я напутал - вызов FormatMessage?

      Видимо вызвал GetLastError повторно после вызова другой функции (например RaiseLastOSError или ShowMessage), хотя в #10 я тебе показывал как надо делать - вызвать один раз сразу после ошибки и сохранить значение в переменной для последующих манипуляций.

      Цитата mawa @
      Проблема в том что когда шифруется слово получается длина 32 символа, затем это слово записуется в файлик. А при расшифровании считывается из файлика, но считывается 8 символов!! Что делать?

      Мда, чудак ты, брат ;)
      С чего ты взял, что после шифрования твой текст останется вообще читабельным текстом, да еще и однострочным. Все стандартные алгоритмы шифрования - двоичные, а не символьные, поэтому в результате шифрования в строке могут оказаться служебные символы, например перевода строки $13, $10 и даже $0 - признак конца текста. Поэтому записывать\читать зашифрованные данные нужно в двоичный файл, а не в текстовый
      ExpandedWrap disabled
        var
          f:file;
        begin
          ...
          AssignFile(f,FileName);
          //запись строки str в файл
          try
            rewrite(f,1);
            blockwrite(f,str[1],Length(str));
          finally
            CloseFile(f);
          end;
          ...
          //чтение строки str из файла
          try
            reset(f,1);
            SetLength(str,FileSize(f)); //задаем размер строки = размеру файла
            blockread(f,str[1],Length(str)); //читаем весь файл
          finally
            CloseFile(f);
          end;


      Добавлено
      mawa
      И еще, несмотря на мое замечание #16, ты продолжаешь использовать вариант шифрования #29, предполагающий что длина зашифрованного текста всегда больше исходной. Ты уверен, что это так ? Я не уверен. Ясно, что AES блочный шифр, поэтому длина входного текста выравнивается вверх на 16 или 32 байта. Но если длина твоего login уже равна 16 или 32, то длина может и не измениться и в итоге алгоритм #29 зашифрует строку дважды.
      Правда я в #16 тоже накосячил с длинами, поэтому правильный вариант должен быть такой:
      ExpandedWrap disabled
          X:=Length(login);
          if CryptEncrypt(key, 0, True, 0, nil, @X, X) then //при pbData=Nil просто в X возвращается требуемая длина
          begin
            Y:=Length(login);
            if X > Y then
              SetLength(login, X)
            else
              UniqueString(login);
            if not CryptEncrypt(key, 0, True, 0, Pointer(login), @Y, X) then
              RaiseLastOSError
            else
            if Y <> Length(login) then SetLength(login, Y);
          end
          else
            RaiseLastOSError;
      Сообщение отредактировано: leo -
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:
      Страницы: (3) 1 2 [3]  все


      Рейтинг@Mail.ru
      [ Script execution time: 0,0902 ]   [ 16 queries used ]   [ Generated: 30.07.25, 00:14 GMT ]