Генератор паролей_нужна помощь!

Тема в разделе "Delphi - FAQ", создана пользователем masel, 12 дек 2006.

Статус темы:
Закрыта.
  1. masel

    masel Гость

    Помогите пожалуйста!
    Сделал генератор паролей, теперь надо сделать так. чтобы он генерировал пароль в зависимости от того какое имя я введу в поле Edit2.Text
    Не догоняю как это можно сделать =(
    Помогите кто может, плиз. Горю перед сессией =(
    Вот код который у меня есть:

    ________________________________________________________________________________
    _______
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    Randomize;
    end;

    function RandomPwd(PWLen: integer): string;
    // таблица символов, используемых в пароле
    const StrTable: string =
    '!#$%&/()=?@<>|{[]}\*~+#;:.-_' +
    'ABCDEFGHIJKLMabcdefghijklm' +
    '0123456789' +
    'ДЦЬдцьЯ' +
    'NOPQRSTUVWXYZnopqrstuvwxyz';
    var
    N, K, X, Y: integer;
    begin
    if (PWlen > Length(StrTable)) then K := Length(StrTable)-1
    else K := PWLen;
    SetLength(result, K);
    Y := Length(StrTable);
    N := 0;

    while N < K do begin
    X := Random(Y) + 1;
    if (pos(StrTable[X], result) = 0) then begin
    inc(N);
    Result[N] := StrTable[X];
    end;
    end;
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    var
    cPwd: string;
    begin

    cPwd := RandomPwd(11);
    Edit1.Text := cPwd;
    // ...
    end;

    procedure TForm1.Button2Click(Sender: TObject);
    begin
    Close
    end;

    end.
     
  2. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    <!--QuoteBegin-masel+12:12:2006, 11:22 -->
    <span class="vbquote">(masel @ 12:12:2006, 11:22 )</span><!--QuoteEBegin-->Не догоняю как это можно сделать
    [snapback]50526" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Самое просто - циклический сдвиг. Для этого необходимо получить код каждого символа и изменить его на некоторое значение, соответствующее значению сдвига в таблице символов
     
  3. masel

    masel Гость

    Спасибо, но мне это ни о чем не говорит =( Я не понимаю как это сделать :( Самое смешное, что у нас даже препод не понимает как это сделать :p Все время бегала куда-то с кем-то советоваться, но так ничего и не заработало. Она поставила зачет всем присутствующим, а тем кто не был, надо предъявит работающую программу, и даже посоветоваться не скем :( Вся надежда на помощь в сети. Если можно объясните поподробней или пример кода набросайте. Спасибо.
     
  4. sab0tage

    sab0tage Гость

    Надеюсь тема ещеактуальна. Как я понял - тебе нужно, чтобы пароль получался из введенного значения. Самый надежный способ - использование ХэшФункций: MD5 например. Можно просто отXORить твой текст инпут.

    или

    Password:='';
    for i:=1 to length(Edit2.Text) do Password:=Password+chr(ord(Edit2.text)+i);

    Да вариаций просто море!!!
     
  5. masel

    masel Гость

    привет! Спасибо за советы, мы тут с другом посидели и насочиняли вот такую вещь =)

    function RandomPwdOnName(sName:String): string;
    Var
    Pass: String;
    i, n, k: Integer;
    S, p: String;
    Ch, Ch1: Char;
    begin
    Result := '';
    if sName = '' then Exit;
    n := 10;
    for i := 1 to Length(sName) do begin
    S := Copy(sName, i, 1);
    Ch := S[1];
    k := Ord(Ch);
    p := IntToHex(k xor n, 1);
    Ch1 := Chr(StrToIntdef('$'+p, 0));
    Pass := Pass + Ch1;
    n := n + 1;
    If n > 10 Then n := 2
    end;
    Result := Pass;
    end;

    procedure TForm1.Button1Click(Sender: TObject);

    begin

    Edit1.Text := RandomPwdOnName(Edit2.Text);

    end;


    При запуске кода пароль гененируется именно от имени, но фишка в том, что пароль выдается ровно с таким колличеством символов, с каким было имя, т.е. если в имени 5 букв, то и в пароле будет 5 =(
    И как сделать так, чтобы букв в пароле было больше, я пока не соображу. Если есть какие-нибудь идеи, подскажите пожалуйста.
    Спасибо.
     
  6. sab0tage

    sab0tage Гость

    Что вы курили :)
    ОК, я слегка подправил код, надеюсь разберешься. Удачи :blink:

     
  7. masel

    masel Гость

    Попробовал код, нифига не работает =(
    А откуда взялся Эдит3? Я его на 2 заменил =)
    F9 срабатывает, но показывает ошибки:

    IntToHex(k xor n,2): [process not accessible]
    Pass:[process not accessible]
    S:[process not accessible]
    Ch:[process not accessible]
    K:[process not accessible]
    K:[process not accessible]
    IntToHex(k xor n,2): [process not accessible]

    если написать имя и нажать кнопку генерации, появляется следующее


    IntToHex(k xor n,2): Undeclared identifier:'k'
    Pass:Undeclared identifier: Pass
    S:Undeclared identifier:'S'
    Ch:0
    K:Undeclared identifier: 'k'
    K:Undeclared identifier: 'k'
    IntToHex(k xor n,2):Undeclared identifier: 'k'

    Что это? :)
     
  8. sab0tage

    sab0tage Гость

    Просто кинь на форму Edit3, и вводи в него желаемую длину пароля. Ну или напрямую в функцию отправляй размер.

    RandomPwdOnName('some name',20) вернет тебе 20ти символьный пароль, сгенерированый от имени.
     
  9. masel

    masel Гость

    Привет!!! Все понял =)
    Все работает! Я в восторге!!! =)
    Спасибо большое за помощь!
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей