import java.security.NoSuchAlgorithmException; import java.security.Provider; import java.security.SecureRandom; import java.security.SecureRandomSpi; import java.security.Security; public class ReplaceAlgorithms { public static void main(String[] args) throws NoSuchAlgorithmException { byte[] bytes = new byte[16]; SecureRandom.getInstance("SHA1PRNG").nextBytes(bytes); System.out.println(new String(bytes)); } static { // Give fake provider highest priority Security.insertProviderAt(new FakeSha1Provider(), 1); } public static class FakeSha1Provider extends Provider { protected FakeSha1Provider() { super("FakeSha1Provider", 1.0, null); put("SecureRandom.SHA1PRNG", FakeAlgorithm.class.getName()); } } public static class FakeAlgorithm extends SecureRandomSpi { @Override protected void engineSetSeed(byte[] seed) { for (int i = 0; i < seed.length; i++) { // Deterministic result for a given length seed[i] = (byte) ('a' + (i % 26)); } } @Override protected void engineNextBytes(byte[] bytes) { for (int i = 0; i < bytes.length; i++) { bytes[i] = (byte) ('a' + (i % 26)); } } @Override protected byte[] engineGenerateSeed(int numBytes) { byte[] bytes = new byte[numBytes]; for (int i = 0; i < numBytes; i++) { bytes[i] = (byte) ('a' + (i % 26)); } return bytes; } } }