Java ile, metotları ve for döngüsünü kullanarak rastgele şifre oluşturan programı inceleyeceğiz. Kullanıcı tarafından şifrenin uzunluğu belirlenerek; şifre içerisinde büyük harfler, küçük harfler ve semboller gibi karakterlerden oluşan rastgele üretilen benzersiz bir şifre oluşturan programı birlikte inceleyelim.
İlk olarak scanner sınıfını ve random sınıfını tanımlamamız gerekiyor.
1 2 | import java.util.Random; import java.util.Scanner; |
Şifrenin kaç basamaklı olacağını kullanıcıdan giriş alarak belirtiyoruz ve şifre uzunluğunun klavyeden girilen veri kadar olacağını belirtiyoruz.
1 2 3 | Scanner input = new Scanner(System.in); System.out.print("Şifre kaç basamaklı olacak = "); int uzunluk = input.nextInt(); |
Ekrana oluşturulan şifreyi metot içerisinde çağırarak yazdırıyoruz
1 | System.out.println(kodkampusu_sifreolusturma(uzunluk)); |
Char tipinde bir metot oluşturuyoruz. Char tipiyle, veri içerisinde harf, rakam, işaret girilebilir.
1 | static char[] kodkampusu_sifreolusturma(int uzunlukdegeri) |
Metot içerisine: string sınıfından bir veri tipi oluşturarak bu veri tipi içerisine; şifre dahilinde kullanılacak olan harfleri, sayıları, karakter ve sembolleri giriyoruz. Bu bölüm içerisinde isterseniz sembolleri veya karakterleri değiştirerek şifrede kullanılacak olan öğeleri isteğinize göre özelleştirebilirsiniz. Ayrıca karakterler sınıfını: büyükharf, küçükharf, sayılar gibi birden fazla string sınıfına ayırarak ayrıştırma yapabilirsiniz. Biz burada tek sınıf kullanacağız.
1 2 3 4 5 6 7 | String karakterler = "QWERTYUIOPĞÜASDFGHJKLŞİZXCVBNMÖÇ"+ "qwertyuıopğüasdfghjklşizxcvbnmöç"+ "1234567890"+ "₺€$£><$½[]()=?!/*-+,:.;@ß~%"+ "‡‰ŠŒŽ‘'“”•–—˜™š›œžŸ¡¢£¤¥¦§¨©ª«¬®¯"+ "°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒ"+ "ÓÔÕÖרÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ"; |
Eğer ki karakterler verisini birden fazla string sınıfına ayırırsanız, bu kısımda sınıfları birleştirmeniz gerekecektir.
String büyükharf = "QWERT...";
String küçükharf = "qwert...";
şeklinde yaptığınız ayırmada bu değerleri tek bir veri tipinde birleştirmek için bu kısım içerisinde; String deger = büyükharf + küçükharf;
tanımlamasını yaparak değer verisi içerisinde verilerimizi tutmamız gerekmektedir. İnce ayrıntıları kaçırmayan kişiler için bu adım önemli gelebilir :) Biz herhangi bir sınıf birleştirmesi yapmadığımız için şuan için sadece karakterler verisini değer sınıfına atayacağız. Bunu atamak tamamen kullanıcının isteğine kalmıştır, ben burada herhangi bir ekleme yapabiliriz düşüncesiyle karakter sinifini başka bir string sınıfına atamış oldum.
1 | String deger = karakterler; |
Şifremizin uzunluğunu klavyeden girilen değere göre yapacak ve bu değer içerisinde kendini döndürerek, random sınıfında üretilen karakterleri for döngüsü içerisine aktaracak. i değeri sıfırdan başlayarak birer birer artarak uzunluk değerini belirlemiş olacak.
1 2 3 | char[] sifre = new char[uzunlukdegeri]; int i; for (i=0; i < uzunlukdegeri; i++) |
For döngüsü içerisinde birer birer uzunluk değerini aktarırken, random olarak karakter ataması yaptırıyoruz. Random metotuyla, rastgelesifre adında bir random sınıfı oluşturuyoruz. Random sınıfıyla karakterler rastgele seçilerek şifre içerisinde yer alacak.
1 | Random rastgelesifre = new Random(); |
Oluşturulan rastgele şifremizi deger metotu içerisinden alıyoruz ve for döngüsü içerisinde dönmüş olan i değerini sifre değerine atıyoruz. CharAt() yöntemini kullanarak dize içerisinde belirtilmiş olan karakterleri kendi içerisinde döndürmek için kullanıyoruz ve random değerini kendi içinde döndürüyoruz.
1 | sifre[i] += deger.charAt(rastgelesifre.nextInt(deger.length())); |
Bu bölüme kadar şifre oluşturmanın temel kodlarını yazdık.
Bu kısımdan itibaren şifreyi oluştururken bize geri sayım yapmasını, saniyeler ile sayarken sanki arka planda işliyormuş görüntüsü vereceğiz. Kaç adım oluşacağını, yani kaç saniyede oluşacağını for döngüsü içerisinde döndürüyoruz. For döngüsü içerisinde ki " gerisayim <= 4 "
değerini, kaç saniye geriye doğru saymasını istiyorsanız ona göre değiştirebilirsiniz.
1 2 3 | System.out.println("... LUTFEN BEKLEYİN ..."); int gerisayim; for( gerisayim = 0 ; gerisayim <= 4 ; gerisayim++) |
For döngüsü içerisinde 4’den geriye doğru giderken her adımda yazı yazmasını, aynı zamanda geri doğru saymasını yazdırıyoruz. Bu sayma değerlerini yazdırması için gerisayim değerinden 4’ü çıkartarak bize her şifreniz oluşturuluyor çıktısını verdikten sonra geri sayımın kalan süresini vermiş olacak.
1 | System.out.println("Şifreniz oluşturuluyor ... " + (4-gerisayim)); |
Try catch metodunu burada kullanmamızın sebebi herhangi bir hata yakalamak değil, programı; Thread.sleep metoduyla kısa süreliğine askıya alarak yukarıda bulunan for döngüsü içerisinde döndürerek geriye sayım yaptırmaktır. Ben burada thread.sleep değerini yani programın askıya alınacağı süreyi (1000) olarak belirledim. Siz isteğinize göre bu değeri değiştirebilirsiniz.
1 2 3 4 5 6 7 8 | try { Thread.sleep(1000); } catch(InterruptedException e) { System.out.println(e); } |
Ardından oluşturulan şifrenin çıktısını verdiriyoruz ve programı random sınıfında oluşturulan değerin olduğu sifre verisine geri döndürüyoruz.
1 2 | System.out.print("Oluşturulan şifre = "); return sifre; |
Kodumuzun bir bütün haline bakacak olursak:
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 58 | import java.util.Random; import java.util.Scanner; public class RastgeleSifreOlusturma { public static void main(String[] args) { java.util.Scanner scanner = new java.util.Scanner(System.in); Scanner input = new Scanner(System.in); System.out.print("Şifre kaç basamaklı olacak = "); int uzunluk = input.nextInt(); System.out.println(kodkampusu_sifreolusturma(uzunluk)); } static char[] kodkampusu_sifreolusturma(int uzunlukdegeri) { String karakterler = "QWERTYUIOPĞÜASDFGHJKLŞİZXCVBNMÖÇ"+ "qwertyuıopğüasdfghjklşizxcvbnmöç"+ "1234567890"+ "₺€$£><$½[]()=?!/*-+,:.;@ß~%"+ "‡‰ŠŒŽ‘'“”•–—˜™š›œžŸ¡¢£¤¥¦§¨©ª«¬®¯"+ "°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒ"+ "ÓÔÕÖרÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ"; String deger = karakterler; char[] sifre = new char[uzunlukdegeri]; int i; for (i=0; i < uzunlukdegeri; i++) { Random rastgelesifre = new Random(); sifre[i] += deger.charAt(rastgelesifre.nextInt(deger.length())); } System.out.println("... LUTFEN BEKLEYİN ..."); int gerisayim; for( gerisayim = 0 ; gerisayim <= 4 ; gerisayim++) { System.out.println("Şifreniz oluşturuluyor ... " + (4-gerisayim)); try { Thread.sleep(1000); } catch(InterruptedException e) { System.out.println(e); } } System.out.print("Oluşturulan şifre = "); return sifre; } } |
Kodumuzun çıktısı:
1 2 3 4 5 6 7 8 | Şifre kaç basamaklı olacak = 5 ... LUTFEN BEKLEYİN ... Şifreniz oluşturuluyor ... 4 Şifreniz oluşturuluyor ... 3 Şifreniz oluşturuluyor ... 2 Şifreniz oluşturuluyor ... 1 Şifreniz oluşturuluyor ... 0 Oluşturulan şifre = -Ù§ñº |
1 2 3 4 5 6 7 8 | Şifre kaç basamaklı olacak = 10 ... LUTFEN BEKLEYİN ... Şifreniz oluşturuluyor ... 4 Şifreniz oluşturuluyor ... 3 Şifreniz oluşturuluyor ... 2 Şifreniz oluşturuluyor ... 1 Şifreniz oluşturuluyor ... 0 Oluşturulan şifre = ÔıÛ-9b!ëç |
1 2 3 4 5 6 7 8 | Şifre kaç basamaklı olacak = 25 ... LUTFEN BEKLEYİN ... Şifreniz oluşturuluyor ... 4 Şifreniz oluşturuluyor ... 3 Şifreniz oluşturuluyor ... 2 Şifreniz oluşturuluyor ... 1 Şifreniz oluşturuluyor ... 0 Oluşturulan şifre = ›Ğı±å6~qR²ş¶©ÿèAzê噟ÖBş² |
Çok güzel bir içerik ilgi çekici ve güzel olmuş elinize sağlık
Teşekkürler :)
teşekkürler