BİLGİ SAYAMIYORUM beta

Java da sayı ve harf içeren rastgele değerler (random string) nasıl oluşturulur?

0

Rastgele içerik üretmeye ihtiyaç duyacağınız durumlar eğer kullanıcı içerikleri ile uğraşıyorsanız muhtemelen olacaktır. Bu kapsamda düşünmeniz gereken iki temel şey; oluşturacağınız rastgele değerlere sahip satır/içerik (string) kaç haneden oluşacak ve hangi sayıları, harfleri ya da işaretleri içerecek. Bundan sonrasında tabii ki ulaşacağınız rastgele içeriği ne için kullanacağınıza göre bunu oluşturma şeklinizin değişmesi. Mesela direk olarak "java.util.Random" kütüphanesini kullanan şu satırdaki RandomStringUtils (Apache kütüphanesi) komutu ile tek satırda çok güvenli olmayan 16 haneli bir rastgele değer oluşturabilirsiniz. Çok güvenli olmamakla kastım şu ki, bu kullanılan kütüphane rastgeleliğe ulaşmak sadece zamanı kullanıyor ki o da tick biçiminde sanırım, yani bilinmesi en azından başta pekimkanlı değil ama yine de bunu güvenli bulmuyorlar:

String rastgeleDeger = RandomStringUtils.randomAlphanumeric(16);

Bunun başka bir versiyonu da yine apache commons kütüphanesi ile şu ama bu da aynı şekilde güvenlik gerektiren işlerde kullanılmamalı. Bundan farklı olarak rastgele değer üreten bir üreteç hazırlayıp, daha sonra onu sayı ile çağırıyoruz:

RandomStringGenerator rastgeleDegerSaglayici = new RandomStringGenerator.Builder().
withinRange('0', 'z').filteredBy(CharacterPredicates.LETTERS, CharacterPredicates.DIGITS).build();
String rastgeleDeger = rastgeleDegerSaglayici.generate(16);

Bir de UUID (Universally Unique Identifier) adında bir şey var ama bu maalesef diğer çözümler gibi değil; bu heksadesimal, yani sayılar dışında bütün alfabe değil A-F arası bulunuyor. Ayrıca bunun da aşırı güvenli olmadığını söylüyorlar ama sevimli bir standart kendisi ve 32 haneyle sabit. Hatta aşağıda olduğu gibi tireleri kaldırmazsanız tanıdık dört tireli UUID yapısını görürsünüz. Ayrıca programınıza geçirirken "java.util.UUID" kütüphanesi çağırmayı unutmayın:

public static String rastgeleDegerSaglayici() {
     String rastgeleUUID= UUID.randomUUID().toString().replaceAll("-", "");
     return rastgeleUUID;
}
String rastgeleDeger = rastgeleDegerSaglayici();

Diğer örnek güvenli olmaları için javada direk olan "java.security.SecureRandom" kütüphanesini kullanıyor. Bu "java.util.Random" dan ya da "Math.Random" biraz farklı bir işlem yapıyor, kendi algoritması rastgeleliği sağlamak için ileri yemleme (seed) teknikleri kullanıyor diyelim. Bu sayede trueRandom olmasa da güvenli olanından yollamış oluyor size. Aşağıdaki örnek istediğiniz uzunluktaki değer kadar rastgelelik işlemi yapıp, her sonucu birleştirip tek bir değere atarak ilerliyor:

static final String nelerOlsun = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
static SecureRandom karistirici = new SecureRandom();
String rastgeleDegerSaglayici(int uzunluk){
     StringBuilder rastgeleDegerYapici = new StringBuilder(uzunluk);
     for(int i=0;i<uzunluk;i++){
          rasgeleDegerYapici.append(nelerOlsun.charAt(karistirici.nextInt(nelerOlsun.length())));
     }
     return rastgeleDeger.toString();
}
String rastgeleDeger = rastgeleDegerSaglayici(16);

Açıkçası eğer rastgelelik ve SecureRandom kavramlarına alışırsanız, Javanın esnekliği ile bu işlem için kendi farklı ve işlevsel programınızı yaratmanız olası.

BENZER 7

Kimse etkileşime girmemiş

ETİKETLER