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

  • Автор темы masel
  • Дата начала
Статус
Закрыто для дальнейших ответов.
M

masel

#1
Помогите пожалуйста!
Сделал генератор паролей, теперь надо сделать так. чтобы он генерировал пароль в зависимости от того какое имя я введу в поле 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.
 
04.09.2006
2 566
3
#2
<!--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]
Самое просто - циклический сдвиг. Для этого необходимо получить код каждого символа и изменить его на некоторое значение, соответствующее значению сдвига в таблице символов
 
M

masel

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

sab0tage

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

или

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

Да вариаций просто море!!!
 
M

masel

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

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 =(
И как сделать так, чтобы букв в пароле было больше, я пока не соображу. Если есть какие-нибудь идеи, подскажите пожалуйста.
Спасибо.
 
S

sab0tage

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

function RandomPwdOnName(sName:String; len:integer): string;
Var
Pass: String;
i, j, n, k: Integer;
S, p: String;
Ch, Ch1: Char;
begin
Result := '';
if sName = '' then Exit;
n := 10;
j:=0;
for i := 1 to Len do begin
j:=j+1;
if j>length(sName) then j:=1;
S := Copy(sName, j, 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,strtoint(Edit3.text));
end;
 
M

masel

#7
Попробовал код, нифига не работает =(
А откуда взялся Эдит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'

Что это? :)
 
S

sab0tage

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

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

masel

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