In Java, we can use SecureRandom.nextBytes(byte[] bytes) to generate a user-specified number of random bytes. This SecureRandom is a cryptographically secure random number generator (RNG).

1. Random 12 bytes (96 bits)

1.1 Generates a random 12 bytes (96 bits) nonce.

HelloCryptoApp.java :

package com.mkyong.crypto;

import java.security.SecureRandom;

public class HelloCryptoApp {

    public static void main(String[] args) {

        byte[] nonce = new byte[12];
        new SecureRandom().nextBytes(nonce);

        System.out.println(convertBytesToHex(nonce));

    }

    // util to print bytes in hex
    private static String convertBytesToHex(byte[] bytes) {
        StringBuilder result = new StringBuilder();
        for (byte temp : bytes) {
            result.append(String.format("%02x", temp));
        }
        return result.toString();
    }

}

Output :

0747a9ad467d4dc29ce70344

1.2 Generates a random 20 bytes (160 bits)

byte[] nonce = new byte[20];
new SecureRandom().nextBytes(nonce);

System.out.println(convertBytesToHex(nonce));

Output :

e2ac8893b23ef174461e4ec37598080ec910b87b

2. Random 32 bytes (256 bits) + DRBG algorithm

2.1 Generates a random 32 bytes (256 bits) with the DRBG algorithm defined in NIST SP 800-90Ar1. By default, SecureRandom uses the SHA1PRNG algorithm to generate a random number.

package com.mkyong.java11;

import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;

public class HelloCryptoApp2 {

    public static void main(String[] args) throws NoSuchAlgorithmException {

        byte[] nonce = new byte[32];
        SecureRandom rand = SecureRandom.getInstance("DRBG");
        rand.nextBytes(nonce);

        System.out.println(convertBytesToHex(nonce));

    }

    private static String convertBytesToHex(byte[] bytes) {
        StringBuilder result = new StringBuilder();
        for (byte temp : bytes) {
            result.append(String.format("%02x", temp));
        }
        return result.toString();
    }

}

Output:

7d5bca7a4cfab6abec28da5cc899c32a0c36f17128f242a3df20301b3812b881

For all supported random algorithm, refer to this SecureRandom Number Generation Algorithms

References

Laisser un commentaire