ADMin Портал!

Delphi Rad XE Исходники SOFTDelphi Rad XE C++ BuilderUbuntuPHP JavaScript Примеры

Партнеры


Профиль


Добро пожаловать
54.224.247.42

Сейчас онлайн
Гостей:22
Поисковые боты:1

Всего:23

Кнопки




Исходный код

Каталог файлов

Генератор паролей с обфускацией

Автор файла: VR-Online Домашняя страницаРейтинг: 5/1Средняя оценка: 5
Размер файла: 920 KBДата публикации: 14.02.2011
Версия: 1.2Скачали: 81

Генератор паролей с обфускациейПример исходника и exe-шник написанный на Delphi 2010.

Изменения:
  • 14.02 - добавлен ScrollBox ssVertical для tMemo
  • 14.02 - русифицированы значки компонентов на форме

    Фонетический алгоритм
    Цель фонетического алгоритма состоит в том, чтобы чередовать гласные и согласные символы. В результате получаются слова похожие на диалект какого нибудь африканского племени. Например "posodume", можно прочитать как "позодумэ". С одной стороны получается произвольный набор символов, а с другой вполне понятные слова, которые к тому же можно легко запомнить. В алгоритме используются симолы латинского алфавита, согласные 'bdghklmnprstz' и гласные 'aeiou'. Символы 'cfjqvwx' и 'y' не используются, так как не позволяют создать звучные слова с их участием.

    "Обфускация"
    Взято в кавычки не просто так, изначально это слово подразумевает запутывание кода для невозможности дизассемблирования. Как правило, после дизасма код заново не скомпилится. Здесь обфускация обозначает замену некоторых символов на их числовые или знаковые эквивеленты с сохранением смысла. Например букву "i"
    можно написать как "!", как бы перевенута. Таким образом, замена слудующих букв будет соответсвовать: b=6, g=9, l=1, s=5, t=7 и z=2 для согласных, a=4 (хотя эту комбинацию можно оспорить), e=3, i=! и o=0 для гласных. Для остальных замену я не искал.


    Код
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    implementation

    uses
      passwdgen; // Не забываем подключить модуль ;)

      ...

    procedure TForm1.Button1Click(Sender: TObject);
    var
      i: Integer;
      CountPass: Integer;
      LenPass: Integer;
    begin
      Memo1.Clear();
      CountPass := StrToInt(EditCountPass.Text); // Количество паролей
      LenPass := StrToInt(EditLenPass.Text); // Длина паролей

      // Выключаем Мемо, что бы не грузить проц лишними вычислениями
      Memo1.Lines.BeginUpdate();

      // Если стоит галка "Обфускация", то делаем ее.
      for i := 0 to CountPass do
        Memo1.Lines.Add(GetPassword(LenPass, CheckBoxObfus.Checked));

      // После обновления влючаем
      Memo1.Lines.EndUpdate();
    end;


    Код
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    unit passwdgen;

    interface

    const
      PatternSymbols1 = 'bdghklmnprstz';
      PatternSymbols2 = 'aeiou';
      PatternObfus1 = '691572';
      PatternObfus2 = '43!0';

    function GetPassword(ALengthPasswd: Integer; AObfus: Boolean = false): String;

    implementation

    function GetPassword(ALengthPasswd: Integer; AObfus: Boolean = false): String;
    var
      l: Integer; // Для цикла
      Pat1: String; // Для списка согласных
      Pat2: String; // Для списка гласных
      CountSym1: Integer; // Для количества используемых символов
      CountSym2: Integer;
    begin
      // Очистка
      SetLength(Result, ALengthPasswd);
      l := 1; // Если не установть эту переменную в еденицу, могут возникнуть баги :)

      Pat1 := PatternSymBols1; // Заносим строку согласных
      Pat2 := PatternSymBols2; // Заносим строку гласных

      // Рандом Вкл.
      Randomize();

      if (AObfus) then
      begin
        // Если выбрали "обфускацию", то прибавляем и "обфусцированные" символы
        Pat1 := Pat1 + PatternObfus1; // Согласные
        Pat2 := Pat2 + PatternObfus2; // Гласные
      end;

      // Получаем длины получившихся строк
      CountSym1 := Length(Pat1); // Длина согласных
      CountSym2 := Length(Pat2); // Длина гласных

      // Пока количество символов, меньше уазанной длины пароля
      while (l <= ALengthPasswd) do
      begin
        // +1 нужен! Потому что, в компании Borland решили сделать индексы строковых
        // типов начинающиеся не с нуля, а с еденицы. А первый символ хранить длину
        // строки.
        // подробней <http://www.vr-online.ru/content/string-chego-ty-mog-i-ne-znat-299>
        Result[l] := Pat1[Random(CountSym1) + 1]; // Записали согласный
        Inc(l); // Переходим к следующему символу
        Result[l] := Pat2[Random(CountSym2) + 1]; // Записываем гласный
        Inc(l); // Еще раз переходим
      end;
    end;
    end.

  •  
     
    Комментарии

    Admin
    Дата: 14.02.2011 | Комментарий: 2
    AdminScrollBox ssVertical - добавлено..
    Дата регистрации: 16.02.2007
    Кирилл Щербатов
    Дата: 11.02.2011 | Комментарий: 1
    Кирилл ЩербатовПрикольная штука. Не хватает только ScrollBox Vertical.
    Дата регистрации: Нет информации
    Ваше имя:
    Комментарий:
    Секретный код:Секретный код
    Повторить:
    Антиспам:



    Powered by SLAED CMS © 2005-2007 SLAED. All rights reserved.