На главную Наши проекты:
Журнал   ·   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 шифрование, расшифрование
    Шифровку тоже надо бы подправить, т.к. код #13 предполагает, что длина зашифрованного текста всегда будет больше длины исходного. Лучше сделать так:
    ExpandedWrap disabled
        X:=Length(login);
        if CryptEncrypt(key, 0, True, 0, nil, @X, X) then //при pbData=Nil просто в X возвращается требуемая длина
        begin
          if X > Length(login) then
            SetLength(login, X)
          else
            UniqueString(login);
          if not CryptEncrypt(key, 0, True, 0, Pointer(login), @X, X) then
            RaiseLastOSError
          else
          if X <> Length(login) then SetLength(login, X);
        end
        else
          RaiseLastOSError;
    Сообщение отредактировано: leo -
      CodeMonkey Подскажи запутался все равно ругается!
      ExpandedWrap disabled
        login:=z_text;
        X := Length(login);
        if not CryptDecrypt(key, 0, True, 0, Pointer(login), @X) then
           RaiseLastOSError;


      Добавлено
      Спасибо!
      Расшифровывает, но только в конце слова не понятные символы доставляет!?
        Цитата mawa @
        Расшифровывает, но только в конце слова не понятные символы доставляет!?

        При дешифровке длина текста уменьшается, добавь коррекцию длины:
        ExpandedWrap disabled
          if not CryptDecrypt(key, 0, True, 0, Pointer(login), @X) then
             RaiseLastOSError
          else
          if X <> length(login) then SetLength(login,X);
          _________________________
          Пример:
          Исходное : qweqweqweqwe27@

          Расшифрованное :
          qweqweqweqwe27@

          Добавлено
          Все работает !!!!
          leo Спасибо Большое !!!!!!!! respect!
            Цитата mawa @
            login:=z_text;

            Учти, что при этом после CryptDecrypt строка z_text тоже изменится. Чтобы не изменялась нужно либо добавить
            UniqueString(login);
            либо сразу вместо присваивания сделать
            SetString(login,pChar(z_text),Length(z_text));
              Вопрос, если пароль не правильный выдает плохие данные, тогда необходимо использовать связку : try - exsept ?
                Да, если нужно вывести сообщение или еще что-то сделать.
                Плюс закрытие всех хэндлов лучше делать в try\finally

                PS: странно, что у тебя FormatMessage не ту ошибку выдал, т.к. RaiseLastOSError использует тот же механизм
                Сообщение отредактировано: leo -
                  leo
                  А зачем сохранять
                  ExpandedWrap disabled
                    login:=z_text;


                  Все итак нормально работает?
                    Работать то работает, но при присваивании login:=z_text может копироваться только указатель на строку, в итоге login и z_text будут указывать на один и тот же текст и соотв-но изменение login в Decript приведет также и к изменению z_text. Если это не важно, то тогда вроде и незачем присвоение login:=z_text делать - можно сразу с z_text работать. Если же z_text не должна меняться, то нужно сделать UniqueString(login)

                    Добавлено
                    Кстати вместо FormatMessage можно использовать SysErrorMessage из SysUtils
                    ExpandedWrap disabled
                        e:=GetLastError;
                        ShowMessage('Error '+IntToStr(e)+'. '+SysErrorMessage(e));

                    PS: Это если вместо генерации исключения просто выдавать сообщение об ошибке
                    Сообщение отредактировано: leo -
                      leo спасибо за помощь! Очень помоГ!
                        mawa, тебе тоже спс - за интересный вопрос ;)
                          Цитата leo @
                          PS: странно, что у тебя FormatMessage не ту ошибку выдал, т.к. RaiseLastOSError использует тот же механизм

                          Я не удивлюсь, если авто вопроса напутал и с вызовом FormatMessage - поэтому FormatMessage возвращал не столько описание ошибки, сколько ошибку при вызове себя или что-то вроде этого. Похоже, автор вопроса больше действует методом научного тыка, слабо понимая, что же вообще он пишет.
                            CodeMonkey
                            А где я напутал - вызов FormatMessage?
                            Я в прошлом году делал лабу по алгоритму RC4, там все было ок, и литературы хватало. А вот с AES, сам не справился!
                            Еще раз спасибо!
                              А почему некоторые слова шифруется, но не расшифровываются (p.s. пароль ввожу верно)? Пишит - плохие данные!
                              Шифрование
                              ExpandedWrap disabled
                                  login:=text;
                                  // вход: login - данные для шифрования
                                  // Шаг 1: определяем, сколько надо байт для хранения зашифрованного текста
                                  X := Length(login);
                                  if not CryptEncrypt(key, 0, True, 0, Pointer(login), @X, Length(login)) then
                                    if GetLastError <> ERROR_MORE_DATA then
                                      RaiseLastOSError;
                                  // Шаг 2: выделили буфер (уже не 512, а ровно, сколько надо)
                                  Y := Length(login);
                                  SetLength(login, X);
                                  // Шаг 3: шифрование
                                  if not CryptEncrypt(key, 0, True, 0, Pointer(login), @Y, Length(login)) then
                                    RaiseLastOSError;
                                  SetLength(login, Y);
                                  {освобождаем контекст криптопровайдера}
                                  CryptReleaseContext(hProv, 0);

                              Расшифрование
                              ExpandedWrap disabled
                                  login:=z_text;
                                  X := Length(login);
                                  if not CryptDecrypt(key, 0, True, 0, Pointer(login), @X) then
                                   RaiseLastOSError
                                    else
                                  if X <> length(login) then
                                   SetLength(login,X);
                                  {освобождаем контекст криптопровайдера}
                                  CryptReleaseContext(hProv, 0);
                                Частный случай:
                                Проблема в том что когда шифруется слово получается длина 32 символа, затем это слово записуется в файлик. А при расшифровании считывается из файлика, но считывается 8 символов!! Что делать?
                                Зашифр.
                                ExpandedWrap disabled
                                  //созд.файла
                                    AssignFile(f,Edit3.Text+'.txt');
                                    Rewrite(f);
                                    CloseFile(f);
                                    //открытие на до запись
                                    AssignFile(f,Edit3.Text+'.txt');
                                    Append(f);
                                    //шифрование
                                    login:=login+'|@@|'+pass;
                                    str:=Zawufrovat(password,login);
                                    writeln(f,str);
                                    CloseFile(f);

                                расшифр
                                ExpandedWrap disabled
                                  //открытие файла
                                    t:=OpenDialog1.FileName;
                                    try
                                      AssignFile(f,t);
                                      reset(f);
                                    except;
                                     ShowMessage('Ошибка чтения файла !');
                                     Exit;
                                    end;
                                    //читаем логин+пароль+конст
                                    readln(f,str);
                                    ShowMessage(IntToStr(length(str))+'  '+str[length(str)]);
                                    password:=MaskEdit1.Text+p_const;
                                    //расшифрование
                                    try
                                      str:=Raswufrovat(password,str);
                                    except;
                                     ShowMessage('Не верный пароль 1!');
                                     memo2.Lines.Add(password);
                                     Exit;
                                    end;
                                Сообщение отредактировано: mawa -
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (3) 1 [2] 3  все


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