La generazione a 128 bit chiave casuale in java

Voglio generare un 128 bit chiave casuale in java. Sto utilizzando il seguente:

byte[] byteBucket = new byte[bytelength];
randomizer.nextBytes(byteBucket);

Sarà la mia matrice di byte di lunghezza 16 (16*8=128) o 128?

 

2 Replies
  1. 7

    provare SecureRandom API.

    SecureRandom random = new SecureRandom();
    byte bytes[] = new byte[16]; //128 bits are converted to 16 bytes;
    random.nextBytes(bytes);
  2. 7

    UUID

    C’è una classe chiamata java.util.UUID, con un metodo per generare un casuale a base di UUID. Questo 128-bit valore di 122 i bit generati in modo casuale.

    UUID uuid = UUID.randomUUID() ;

    Chiamata toString per visualizzare il valore di una stringa esadecimale in formato canonico con i trattini inserito.

    uuid.toString(): 24b47cf5-fb53-4fb1-a5a2-8b415260304d

    È possibile estrarre i 128 bit come un paio di 64-bit long numeri interi. Chiamata getMostSignificantBits() e getLeastSignificantBits().

    long mostSignificant = uuid.getMostSignificantBits() ;
    long leastSignificant = uuid.getLeastSignificantBits() ;

    Questo valore potrebbe non essere appropriato per le critiche le applicazioni di sicurezza con 4 bit di essere prevedibile (non casuale). Ma in altre applicazioni pratiche, questo pratico di classe può funzionare bene.

    Qui è una domanda che ho trovato sul MODO con spiegazione più dettagliata: Rischio di collisione utilizzando il bit più significativi di un UUID in Java

    • java.util.UUID/randomUUID non è adatto per uso generale a 128 bit generazione di un numero casuale, dal momento che genera solo 122 bit casuali. Vedere en.wikipedia.org/wiki/…
    • Si prega di spiegare come si è accennato nel javadoc per UUID “UNA classe che rappresenta un immutabile UUID (universally unique identifier). Un UUID rappresenta un valore a 128 bit.” Capisco che effettivamente genera 122 bit solo. ma è anche unico in tutto il mondo, non è vero?
    • Entrambe le osservazioni sono corrette: In un casuale basato su UUID solo, 122 di 128 bit, è generato in modo casuale. Quindi tecnicamente non incontro il 128-bit di casualità chiesto nella Domanda. Ma in pratica, nel mondo reale, entrambi hanno la stessa probabilità di collisioni: praticamente zero. Critiche le applicazioni di sicurezza, casuale UUID potrebbe non essere appropriato, ma per altre applicazioni non critiche casuale UUID funziona bene ed è comodo con una breve riga di codice utilizzando built-in classe Java.

Lascia un commento