Небольшой Генератор паролей на основе randomPoisson.

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

Небольшой Генератор паролей на основе randomPoisson.

Сообщение fedan » 08.05.2018 00:14:24

Код: Выделить всё
program gen_password;

uses
  SysUtils;
//  Math;
//  character;

function randomPoisson(mean: integer): integer;
  { Generator for Poisson distribution (Donald Knuth's algorithm) }
const
  RESOLUTION = 1000;
var
  k: integer;
  b, l: ValReal;
begin
  assert(mean > 0, 'mean < 1');
  k := 0;
  b := 1;
  l := exp(-mean);
  while b > l do
  begin
    k := k + 1;
    b := b * random(RESOLUTION) / RESOLUTION;
  end;
  Result := k - 1;
end;

const
  Keywords = '!$%&0123456789<>?ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz';
  KeywordsLength = Length(Keywords);

function makePass1: string;
var
  I, J, K: integer;
  tmp: string;
//  PassLen: integer;
  c: char;
  code, MaxCycles: integer;
begin
  tmp := Keywords;

  //  code := 1234;
  MaxCycles := 255;
  //  RandSeed := code;
  Randomize;
  for i := 1 to MaxCycles do
  begin
    j := trunc(KeywordsLength * random) + 1;
    k := trunc(KeywordsLength * random) + 1;
    c := tmp[j];
    tmp[j] := tmp[k];
    tmp[k] := c;
  end;

  I := randomPoisson(KeywordsLength shr 1);
  Writeln(I);
  Result := '';
  repeat
    c := tmp[randomPoisson(KeywordsLength)];
    while (Ord(c) = 0) or (Pos(c, Result) > 0) do
      c := tmp[randomPoisson(KeywordsLength)];
    Result := Result + c;
    Dec(I)
  until I = 0;
end;

function makePass2: string;
var
  PassLen: integer;
  c: char;
begin
  Result := '';
  Randomize;
  PassLen := randomPoisson(KeywordsLength shr 1);
  Writeln(PassLen);

  repeat
    c := Keywords[trunc(KeywordsLength * random) + 1];
    while (Ord(c) = 0) or (Pos(c, Result) > 0) do
      c := Keywords[trunc(KeywordsLength * random) + 1];
    Result := Result + c;
    Dec(PassLen)
  until PassLen = 0;
end;

begin
//  Writeln(makePass1);
  Writeln(makePass2);
end.


Добавлено спустя 14 минут 19 секунд:
Алгоритм всегда выбирает уникальные символы из набора, т.е. повторяющихся символов нет.
Может кому пригодится, я им генерирую пароли для разных сайтов.
Keywords можно расширить, но некоторые сайты не принимают спецсимволы.
Вложения
gen_password.7z
(2.72 КБ) Скачиваний: 117
fedan
новенький
 
Сообщения: 48
Зарегистрирован: 15.09.2016 21:18:48

Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

Рейтинг@Mail.ru