A component that can generate random number/byte values as needed. Useful in cryptography or security scenarios where random byte arrays are needed, such as for password salts, nonces, initialization vectors and other seeds.
This is essentially the same as a {@link java.security.SecureRandom SecureRandom}, and indeed implementations of this interface will probably all use {@link java.security.SecureRandom SecureRandom} instances, but thisinterface provides a few additional benefits to end-users:
- It is an interface rather than the JDK's {@code SecureRandom} concrete implementation. Implementation detailscan be customized as necessary based on the application's needs
- Default per-instance behavior can be customized on implementations, typically via JavaBeans mutators.
- Perhaps most important for Shiro end-users, tt can more easily be used as a source of cryptographic seed data, and the data returned is already in a more convenient {@link ByteSource ByteSource} format in case that data needsto be {@link org.apache.shiro.util.ByteSource#toHex() hex} or{@link org.apache.shiro.util.ByteSource#toBase64() base64}-encoded.
For example, consider the following example generating password salts for new user accounts:
RandomNumberGenerator saltGenerator = new {@link org.apache.shiro.crypto.SecureRandomNumberGenerator SecureRandomNumberGenerator}(); User user = new User(); user.setPasswordSalt(saltGenerator.nextBytes().toBase64()); userDAO.save(user);
@since 1.1