まず、java.security.SecureRandomを用いてランダムなバイト列を生成します。
byte bytes[] = new byte[16]; SecureRandom secRandom = SecureRandom.getInstance("SHA1PRNG"); secRandom.nextBytes(bytes);
二行目で乱数を生成するインスタンスを作成し、その後三行目を繰り返すことでbytesの中に繰り返しランダムなバイト列が格納される事になります。
その後、
StringBuffer buf = new StringBuffer(); for (int i = 0; i < bytes.length; i++) { buf.append(String.format("%02x", bytes[i])); }
と書くことで、16進数の文字列に変更できます。
ちなみに、これはCSRFと同じ仕組みらしいです。
(参考文献):https://www.websec-room.com/2013/03/05/438