Random password generator

April 22, 2009 at 5:10 pm | Posted in General | 4 Comments

Oleh Zamrony P. Juhara
Ada posting di mailing list Delphindo tentang bagaimana membuat password yang acak lewat program. Sebenarnya sangat mudah. Hanya perlu tahu bagaimana menghasilkan nilai acak menggunakan fungsi Random().

function Random(const ARange: Integer): Integer;


Fungsi kedua adalah Random() tanpa parameter. Nilai kembalinya adalah bilangan floating-point dengan kisaran 0<=X<1.

function Random:extended;

Sebelum menggunakan fungsi Random(), Anda paling tidak perlu memanggil Randomize() sekali untuk inisialisasi random number generator.

Trik menghasilkan password acak dengan panjang tertentu

Untuk menghasilkan teks acak, Anda perlu menentukan panjang teks yang akan dihasilkan. Dengan SetLength() Anda bisa mengatur panjang suatu string secara dinamis. Jika panjang password sudah Anda tentukan, langkah selanjutnya tiap karakter pada password ditentukan acak dengan menggunakan fungsi Random(). Output fungsi Random() digunakan untuk melakukan look-up ke daftar karakter yang diijinkan untuk menjadi karakter password. Parameter fungsi Random() kita isi dengan jumlah karakter yang diijinkan sebagai karakter password.

Implementasi

Berikut ini adalah source code lengkap kelas TPasswordGenerator yang membungkus fungsionalitas pembuatan password acak dengan panjang tertentu.

unit paswgen;

interface
uses classes;

const
  CHAR_ALPHANUM='ABCDEFGHIJKLMNOPQRSTUVWXYZ'+
                           'abcdefghijklmnopqrstuvwxyz'+
                           '0123456789';
  CHAR_ALPHA='ABCDEFGHIJKLMNOPQRSTUVWXYZ'+
                     'abcdefghijklmnopqrstuvwxyz';
  CHAR_NUMERIC='0123456789';

type
  TPasswordGenerator=class(TObject)
  private
    FMaxChar: word;
    FPassword: string;
    FCharacter: string;
    procedure SetMaxChar(const Value: word);
    procedure SetCharacter(const Value: string);
  public
    constructor Create;
    procedure Generate;

    //password
    property Password:string read FPassword;
    //karakter yang diijinkan
    property Character:string read FCharacter write SetCharacter;
    //panjang password
    property MaxChar:word read FMaxChar write SetMaxChar;
  end;

implementation


{ TPasswordGenerator }

constructor TPasswordGenerator.Create;
begin
  FMaxChar:=8;
  SetLength(FPassword,FMaxChar);
  FCharacter:=CHAR_ALPHANUM;
end;

procedure TPasswordGenerator.Generate;
var i,indx:word;
begin
  SetLength(FPassword,FMaxChar);
  for i:=1 to FMaxChar do
  begin
    indx:=random(length(FCharacter))+1;
    FPassword[i]:=FCharacter[indx];
  end;
end;

procedure TPasswordGenerator.SetCharacter(const Value: string);
begin
  FCharacter := Value;
end;

procedure TPasswordGenerator.SetMaxChar(const Value: word);
begin
  FMaxChar := Value;
end;

initialization
Randomize;
end.

Contoh penggunaan TPasswordGenerator

Buat project baru, tambahkan kontrol TEdit beri nama edPassword dan TButton dengan nama btnGeneratePassword. Buat event handler untuk OnClick milik btnGeneratePassword. Contoh bagaimana menggunakan kelas ini ada pada potongan kode berikut:

procedure TForm1.btnGeneratePasswordClick(Sender: TObject);
var pasw:TPasswordGenerator;
begin
  pasw:=TPasswordGenerator.Create;
  try
    pasw.MaxChar:=16;
    pasw.Character:=CHAR_ALPHANUM;
    pasw.Generate;
    edPassword.Text:=pasw.Password;
  finally
    pasw.free;
  end;
end;

Berikut ini adalah contoh screenshotnya.

Random password generator screenshot

Random password generator screenshot

4 Comments »

RSS feed for comments on this post. TrackBack URI

  1. Selain random generator, program membuat serial number juga hampir sama hanya saja saat ini saya kesulitan mencari algoritma serial number n gimana cek validasi serial number yang dah jadi.

  2. klo untuk serial number generator gunakan component MaxProtector dari MaxComponents, tinggal di googling aja mas…

  3. bagaimana yaa caranya buat nampilin hasil acak string sesuai dengan jumlah yang kita inginkan. misalnya pingin nampilin hasil acak random sebanyak 100 kali.dengan menggunakan 6 karakter pada string yang di acak……..??

  4. An impressive share! I’ve just forwarded this onto a coworker who was doing a little homework on this. And he actually bought me dinner simply because I discovered it for him… lol. So allow me to reword this…. Thanks for the meal!! But yeah, thanks for spending time to talk about this matter here on your blog.


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Create a free website or blog at WordPress.com.
Entries and comments feeds.

%d bloggers like this: