SecureRandom产生强随机数简介

SecureRandom是强随机数生成器,主要应用的场景为:用于安全目的的数据数,例如生成秘钥或者会话标示(session ID),弱随机数生成器会产生严重的安全问题,而使用SecureRandom这样的强随机数生成器将会极大的降低出问题的风险。

SecureRandom与Random有很强的关系。

1. SecureRandom继承于Random,看一下它的两个构造函数构造函数:

public SecureRandom()
{
    super(0);//调用Random的构造函数
    getDefaultPRNG(false, null);
}
public SecureRandom(byte seed[])
{
    super(0);//调用Random的构造函数
    getDefaultPRNG(true, seed);
}

2. SecureRandom与Random的常见的两个方法如下所示:

获得一个随机的int数:

public int nextInt() {
        return next(32);
    }

next方法如下:

protected int next(int bits) {
        long oldseed, nextseed;
        AtomicLong seed = this.seed;
        do {
            oldseed = seed.get();
            nextseed = (oldseed * multiplier + addend) & mask;
        } while (!seed.compareAndSet(oldseed, nextseed));
        return (int)(nextseed >>> (48 - bits));
    }

获得随机的字节数组:

synchronized public void nextBytes(byte[] bytes)
{
    secureRandomSpi.engineNextBytes(bytes);
}

获得别的随机数的方法见下图:

想更深入的SecureRandom研究文章,请参考别的资料。

时间: 2024-10-10 05:27:02

SecureRandom产生强随机数简介的相关文章

SecureRandom加密的强随机数生成器

http://www.ruby-doc.org/stdlib-1.9.3/libdoc/securerandom/rdoc/SecureRandom.html (1)base64(n=nil) ::base64 generates a random base64 string. The argument n specifies the length of the random length. The length of the result string is about 4/3 of n. I

SecureRandom生成随机数超慢 导致tomcat启动时间过长的解决办法

用腾讯云的CentOS 7.2 CVM 服务器跑Tomcat时发现,Tomcat启动的特别慢,通过查看日志,发现时间主要花在实例化SecureRandom对象上了. 由该日志可以看出,实例化该对象使用了460秒,导致整个应用启动了480秒之久. 根本原因是SecureRandom 这个jre的工具类的问题. 具体内容:JDK-6521844 : SecureRandom hangs on Linux Systems 那为什么SecureRandom generateSeed这么慢,甚至挂在Lin

Java中生成随机数Random、ThreadLocalRandom、SecureRandom、Ma

我们来说说Java常见的生成随机数的几种方式:Random,ThreadLocalRandom,SecureRandom;其实产生随机数有很多种方式但我们常见的就这几种,如果需要详细了解这个三个类,可以查看JAVA API. Random random = new Random(); int a = random.nextInt(5);//随机生成0~4中间的数字 其实Random是有构造函数的,他的参数可以传一个long类型的值,当使用空的构造的时候,使用的实际上是System.nanoTim

关于Java随机数

Java提供两种类型的随机数发生器 1.伪随机数发生器 伪随机数发生器采用特定的算法,将随机数种子seed转换成一系列的伪随机数.伪随机数依赖于seed的值,给定相同的seed值总是生成相同的随机数.伪随机数的生成过程只依赖CPU,不依赖任何外部设备,生成速度快,不会阻塞. Java提供的伪随机数发生器有java.util.Random类和java.util.concurrent.ThreadLocalRandom类. Random类采用AtomicLong实现,保证多线程的线程安全性,但正如该

SecureRandom

我们知道,Random类中实现的随机算法是伪随机,也就是有规则的随机.在进行随机时,随机算法的起源数字称为种子数(seed),在种子数的基础上进行一定的变换,从而产生需要的随机数字. 相同种子数的Random对象,相同次数生成的随机数字是完全相同的.也就是说,两个种子数相同的Random对象,生成的随机数字完全相同. 所以在需要频繁生成随机数,或者安全要求较高的时候,不要使用Random,因为其生成的值其实是可以预测的. SecureRandom类提供加密的强随机数生成器 (RNG) 当然,它的

《白帽子讲WEB安全》学习笔记之第11章 加密算法与随机数

第11章 加密算法与随机数 11.1 概述 攻击密码系统的方法 密码分析者攻击密码系统的方法主要有以下三种: (1)穷举攻击 所谓穷举攻击是指密码分析者采用依次试遍所有可能的密钥对所获密文进行解密,直至得到正确的明文. (2)统计分析攻击 所谓统计分析攻击就是指密码分析者通过分析密文和明文的统计规律来破译密码. (3)数学分析攻击 所谓数学分析攻击是指密码分析者针对加解密算法的数学基础和某些密码学特性,通过数学求解的方法来破译密码. 破译密码的类型 (1)唯密文攻击(Ciphertext-onl

一、解密随机数生成器(1)——真随机数生成器(转)

解密随机数生成器(1)--真随机数生成器 从小就一直很好奇,MP3播放器的随机播放功能是如何实现的,今天读到一篇关于随机数的文章,又勾起了我的那时好奇心,索性上下求索,了解了随机数背后的很多知识,顿觉豁然开朗,特意写这篇文章和大家总结分享一下. 其实,随机数在我们身边无处不在.无论是玩扑克牌麻将骰子时的点数,玩LOL时的玩家匹配,还是高大上的量子物理,核聚变,都无一例外地随机数有关,在混沌理论中,这个世界本身就是一系列随机过程的产物--好吧,有点激动,扯得太远了--作为编程爱好者,应该会发现,每

家庭装修用材之——陶瓷中能强的介绍

陶瓷是每个新家在进行家装的时候都要选购的建材,且陶瓷质量的好坏将直接影响到家居生活的舒适与和谐.但是,对于陶瓷的选择,消费者门往往很是迷茫,面对市面上众多的陶瓷品牌,究竟怎样的陶瓷才能营造出温馨惬意的家居风格呢.若你还在疑惑,不妨试试能强陶瓷吧,做为专业的陶瓷企业,定能满足你不同的需求. 看看能强陶瓷简介 能强陶瓷,来自广东能强陶瓷有限公司,是一家专业从事生产玻化抛光砖.通体瓷质仿古砖.不透水精品瓷片的大规模陶瓷企业.能强陶瓷公司引进了意大利萨克米压机.先进的抛光线及多套高性能检测设备,在产品的

随机数 验证码问题

一.前言  在日常工作当中,经常会有需要获取随机数.随机字符的需求,如:生成随机数验证码.生成随机字符串签名.生成2个数字之间的随机数等.这些场景其根本都在于随机数的生成,本文将对java当中生成随机数.随机字符等常见应用场景及获取方法进行简单小结. 二.伪随机.真随机数简介   计算机很难产生真正意义上的真随机数,通常我们所说的产生随机数,都是指伪随机数.从一定意义上来说,计算机本身几乎是不可能产生真正意义上的真随机数的,因为其一定是按照一定的运算规则来获取随机数的:当然,伪随机数的伪并不是说