Java中的随机数与安全随机数

先决条件: 用Java生成随机数 JAVA安全安全随机类: 此类提供了一个加密强随机数生成器(RNG)。加密强随机数最低限度地符合中规定的统计随机数生成器测试 FIPS 140-2,加密模块的安全要求 ,第4.9.1节。此外,SecureRandom必须产生非确定性输出。因此,传递给SecureRandom对象的任何种子材料都必须是不可预测的,并且所有SecureRandom输出序列必须具有强大的加密能力。 JAVAutil。随机类别: Random中定义的类在密码学上不强,所选的数字也不是完全随机的,因为使用了确定的数学算法(基于Donald E.Knuth的减法随机数生成器算法)来选择它们。因此,将此类用于需要高安全级别的任务(如创建随机密码等)是不安全的。

null

随机与安全随机

  1. 尺寸: 一个随机类只有48位,而SecureRandom最多可以有128位。因此,在SecureRandom中重复的几率更小。
  2. 种子生成: Random使用系统时钟作为种子/或生成种子。因此,如果攻击者知道种子产生的时间,就可以很容易地复制它们。但是SecureRandom会从您的操作系统中获取随机数据(它们可以是击键之间的间隔等——大多数操作系统都会收集这些数据并将其存储在文件中—/dev/Random和/dev/urandom(对于linux/solaris),并将其用作种子。
  3. 破解密码: 在随机的情况下,只需要2^48次尝试,有了今天先进的cpu,就有可能在实际时间打破它。但对于securerandom,需要进行2^128次尝试,这将需要多年时间才能与当今先进的机器实现收支平衡。
  4. 生成函数: 标准的Oracle JDK 7实现使用所谓的线性同余生成器在java中生成随机值。util。随机的而Secure Random实现了SHA1PRNG算法,该算法使用SHA1生成伪随机数。该算法计算一个真实随机数(使用熵源)上的SHA-1散列,然后将其与一个64位计数器连接,每个操作递增1。
  5. 安全: 因此,java。util。random类不得用于安全关键应用程序或保护敏感数据。

使用java生成随机数。util。随机的

JAVA

// A Java program to demonstrate
// random number generation
// using java.util.Random;
import java.util.Random;
public class generateRandom {
public static void main(String args[])
{
// create instance of Random class
Random rand = new Random();
// Generate random integers in range 0 to 999
int rand_int1 = rand.nextInt( 1000 );
int rand_int2 = rand.nextInt( 1000 );
// Print random integers
System.out.println( "Random Integers: " + rand_int1);
System.out.println( "Random Integers: " + rand_int2);
}
}


输出:

Random Integers: 956Random Integers: 678

使用java生成随机数。安全安全随机;

JAVA

// A Java program to demonstrate secure
// random number generation
// using java.security.SecureRandom
import java.security.SecureRandom;
public class generateRandom {
public static void main(String args[])
{
// create instance of SecureRandom class
SecureRandom rand = new SecureRandom();
// Generate random integers in range 0 to 999
int rand_int1 = rand.nextInt( 1000 );
int rand_int2 = rand.nextInt( 1000 );
// Print random integers
System.out.println( "Random Integers: " + rand_int1);
System.out.println( "Random Integers: " + rand_int2);
}
}


输出:

Random Integers: 817Random Integers: 500

本文由 萨凯特·库马尔 .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 贡献极客。组织 或者把你的文章寄到contribute@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。 如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。

© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享