String createData(int length) {
StringBuilder sb = new StringBuilder();
Random rand = new Random();
for (int i = 0; i < length; i++) {
sb.append(rand.nextInt(10));
}
String data = sb.toString();
return data;
}
可以根据输入的length生成合适长度的随机数,非常方便
//以下将在Windows上创建SUN SHA1PRNG
//默认配置和Sun JRE,以及Solaris / Linux
//如果在java.security中修改securerandom.source
SecureRandom sr1 = new SecureRandom();
//以下将创建SUN SHA1PRNG如果最高
//优先级CSP是SUN
SecureRandom sr2 = SecureRandom.getInstance(“SHA1PRNG”);
//以下将始终创建SUN SHA1PRNG
SecureRandom sr3 = SecureRandom.getInstance(“SHA1PRNG”,“SUN”);
根据Sun的文档,java.security.SecureRandom
任何这些调用都不会返回返回的实例。如果在这些调用中的一个java.security.SecureRandom.nextBytes(byte[])
被调用之后,则使用由底层操作系统提供的安全机制(从Windows中的JRE 1.4.1开始,在Linux和Solaris中以JRE 1.4.2开始)种下PRNG。如果在调用之前java.security.SecureRandom.setSeed(long)
或java.security.SecureRandom.setSeed(byte[])
之后调用java.security.SecureRandom.nextBytes(byte[])
,则旁路内部播种机制,只有提供的种子才能生成随机数。
对于那些不熟悉加密PRNG的内部工作的人来说,他们的工作就是采取一个相对较小的随机种子,并使用它来产生对于不知道种子是什么的人来说似乎随机的确定性输出。PRNG试图确保输出不显示有关种子的任何信息,并且观察输出的人不能在不知道种子的情况下预测未来的输出。
通过绕过SHA1PRNG的内部安全播种机制,您可能会危及PRNG输出的安全性。如果您使用攻击者可能预测的任何内容(例如,创建PRNG实例的时间),那么使用java.security.SecureRandom
可能无法提供所需的安全级别。