Virtualzone Heiner Peuser's Blog: Tutorials, How-Tos, Software.

24Oct/110

Java’s SecureRandom.generateSeed() on Linux

On my Ubuntu server, running the following Java code caused the application to hang:

for (int i=1; i<=1000; i++) {
	SecureRandom random = new SecureRandom();
	// Deprecated: byte[] iv = random.getSeed(16);
	byte[] iv = random.generateSeed(16);
	System.out.println(i);
}

The code runs smoothly on Windows,  but hangs on Linux. I found out that with Java 5 or later, you need to run your application with the following parameter:

-Djava.security.egd=file:/dev/./urandom

Alternatively, you can modify the file jre/lib/security/java.security so that the following property is set permanently:

securerandom.source=file:/dev/./urandom

This applies to JRE 5, JRE 6 and JRE 7.

By the way: In Java 1.4, the default setting is /dev/random, which tends to block if there is no I/O action. Changing the setting to /dev/urandom (as above) fixes the issue here.

For further information, have a look at this bug report.

Comments (0) Trackbacks (0)

No comments yet.


Leave a comment

(required)

Turn on pictures to see the captcha *

No trackbacks yet.