import java.security.SecureRandom;
import java.util.Random;

public class PembuatToken {

    public static void main(String[] args) {
        // Bagian 1: Random ber-seed sepenuhnya deterministik.
        Random generatorA = new Random(42);
        Random generatorB = new Random(42);

        System.out.println("=== java.util.Random dengan seed sama (dua instance) ===");
        for (int i = 1; i <= 3; i++) {
            System.out.println("nilai ke-" + i + ": " + generatorA.nextInt(1_000_000)
                    + " vs " + generatorB.nextInt(1_000_000));
        }
        System.out.println("Kedua deret identik: bila seed bocor, seluruh deret bisa diprediksi.");

        // Bagian 2: SecureRandom tanpa seed - tidak diprediksi.
        SecureRandom acakAman = new SecureRandom();
        byte[] token = new byte[16];
        acakAman.nextBytes(token);

        System.out.println();
        System.out.println("=== SecureRandom: token sesi 16 byte ===");
        System.out.println("Panjang token   : " + (token.length * 8) + " bit");
        System.out.println("Isi token       : <tidak dicetak - berbeda pada tiap eksekusi>");
        System.out.println("Sumber acak     : entropi sistem operasi, tanpa seed aplikasi");
    }
}
