How to generate secure random number in Java
In Java programming language, we normally use the Math.random()
to generate a random number but Math.random()
will causes the vulnerability in your application. To generate the cryptographically strong random number, Java provides the SecureRandom
class inside java.security
package.
A caller obtains an SecureRandom
instance via the no-argument constructor or one of the methods getInstance
.
For Windows Machine
If you are a Windows user, you need to pass SHA1PRNG algorithm in getInstance
methods.
SecureRandomNumberWin.java
package org.websparrow;
import java.security.SecureRandom;
public class SecureRandomNumberWin {
public static void main(String[] args) {
SecureRandom secureRandom = null;
try {
secureRandom = SecureRandom.getInstance("SHA1PRNG");
System.out.println(secureRandom.nextInt(1000000));
} catch (Exception e) {
e.printStackTrace();
}
}
}
For Linux Machine
Linux user will pass the NativePRNG algorithm in getInstance
methods.
SecureRandomNumberLinux.java
package org.websparrow;
import java.security.SecureRandom;
public class SecureRandomNumberLinux {
public static void main(String[] args) {
SecureRandom secureRandom = null;
try {
secureRandom = SecureRandom.getInstance("NativePRNG");
System.out.println(secureRandom.nextInt(1000000));
} catch (Exception e) {
e.printStackTrace();
}
}
}
Throws:
NoSuchAlgorithmException
– if no Provider supports a SecureRandomSpi implementation for the specified algorithm.