`
yangzb
  • 浏览: 3519785 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SecureRandom

    博客分类:
  • Java
阅读更多

java.security
类 SecureRandom

java.lang.Object

  继承者 
java.util.Random

      继承者 
java.security.SecureRandom

所有已实现的接口:
Serializable

public class SecureRandom
extends Random

 

此类提供加密的强随机数生成器 (RNG)。许多实现都是伪随机数生成器 (PRNG) 形式,这意味着它们将使用确定的算法根据实际的随机种子生成伪随机序列。其他实现可以生成实际的随机数,而另一些实现则可能结合使用这两项技术。

加密的强随机数至少要遵从《FIPS 140-2, Security Requirements for Cryptographic Modules 》中 4.9.1 部分指定的统计随机数生成器测试。另外,SecureRandom 还必须产生非确定性输出,因此,正如以下文章中所描述的那样,要求种子材料必须是不可预知的,SecureRandom 的输出必须是加密的强序列:《RFC 1750:Randomness Recommendations for Security 》。

与 Java Security 中其他基于算法的类一样,SecureRandom 也提供了与实现无关的算法,因此,调用方(应用程序代码)会请求特定的 RNG 算法并将它传回到该算法的 SecureRandom 对象中。如果需要,还可以通过特定的提供程序请求特定的算法。请参见 getInstance 方法。

因此,有以下两种请求 SecureRandom 对象的方法:仅指定算法名称,或者既指定算法名称又指定包提供程序。

  • 如果仅指定算法名称,如下所示:
          SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
     
    系统将确定环境中是否有所请求的算法实现,是否有多个,是否有首选实现。

     

  • 如果既指定了算法名称又指定了包提供程序,如下所示:
          SecureRandom random = SecureRandom.getInstance("SHA1PRNG", "SUN");
     
    系统将确定在所请求的包中是否有算法实现;如果没有,则抛出异常。

SecureRandom 实现尝试完全随机化生成器本身的内部状态,除非调用方在调用 getInstance 方法之后又调用了 setSeed 方法:

      SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
      random.setSeed(seed);
 

在调用方从 getInstance 调用中获得 SecureRandom 对象之后,它可以调用 nextBytes 来生成随机字节:

      byte bytes[] = new byte[20];
      random.nextBytes(bytes);
 

调用方还可以调用 generateSeed 方法来生成给定的种子字节数(例如,为其他随机数量生成器提供种子):

      byte seed[] = random.generateSeed(20);
 

 

 

另请参见:
SecureRandomSpi , Random , 序列化表格

<!----> <!---->

构造方法摘要
  SecureRandom ()
          通过使用此构造方法,调用方可获取一个 SecureRandom 对象,该对象包含的实现来自具有 SecureRandom 实现的最高优先级已安装提供程序。
  SecureRandom (byte[] seed)
          通过使用此构造方法,调用方可获取一个 SecureRandom 对象,该对象包含的实现来自具有 SecureRandom 实现的最高优先级已安装提供程序。
protected SecureRandom (SecureRandomSpi  secureRandomSpi, Provider  provider)
          创建 SecureRandom 对象。
  <!---->

<!---->

方法摘要
 byte[] generateSeed (int numBytes)
          返回给定的种子字节数量,该数量可使用此类用来为其自身提供种子的种子生成算法来计算。
 String getAlgorithm ()
          返回此 SecureRandom 对象实现的算法的名称。
static SecureRandom getInstance (String  algorithm)
          生成实现指定随机数生成器 (RNG) 算法的 SecureRandom 对象。
static SecureRandom getInstance (String  algorithm, Provider  provider)
          如果提供程序能够提供此种 RNG 实现,则为指定的 RNG 算法(由指定的提供程序提供)生成 SecureRandom 对象。
static SecureRandom getInstance (String  algorithm, String  provider)
          如果提供程序能够提供此种 RNG 实现,则为指定的 RNG 算法(由指定的提供程序提供)生成 SecureRandom 对象。
 Provider getProvider ()
          返回此 SecureRandom 对象的提供程序。
static byte[] getSeed (int numBytes)
          返回给定的种子字节数量,该数量可使用此类用来为其自身提供种子的种子生成算法来计算。
protected  int next (int numBits)
          生成一个包含用户指定伪随机位数的整数(右对齐,带前导零)。
 void nextBytes (byte[] bytes)
          生成用户指定的随机字节数。
 void setSeed (byte[] seed)
          重新提供此随机对象的种子。
 void setSeed (long seed)
          使用给定 long seed 中包含的八个字节,重新提供此随机对象的种子。

 <!---->

从类 java.util.Random 继承的方法
nextBoolean , nextDouble , nextFloat , nextGaussian , nextInt , nextInt , nextLong

 <!---->

从类 java.lang.Object 继承的方法
clone , equals , finalize , getClass , hashCode , notify , notifyAll , toString , wait , wait , wait
分享到:
评论
1 楼 tuspark 2015-07-30  
博主写的内容跟JDK的API查不多,读完之后收获不大。关于SecureRandom的内容网上详细介绍的不多,可以看这篇《SecureRandom简介》,这篇文章介绍的还不错。

相关推荐

    带有SecureRandom补丁的Android加密库。.zip

    `SecureRandom`类是Java和Android中用于生成随机数的重要工具,它通常被用于密码学中的密钥生成、初始化向量(IV)的创建以及其他安全性相关的需求。然而,原生的`SecureRandom`在某些版本的Android上可能存在性能...

    Tomcat 启动时 SecureRandom 非常慢解决办法

    主要介绍了Tomcat 启动时 SecureRandom 非常慢解决办法的相关资料,需要的朋友可以参考下

    jsse-2.0.5.jar.zip

    java.security.NoSuchAlgorithmException: SHA1PRNG SecureRandom not available at sun.security.jca.GetInstance.getInstance(GetInstance.java:142) at java.security.SecureRandom.getInstance(SecureRandom....

    PASSword:使用SecureRandom和来自https的熵数据的安全密码生成器

    密码 使用SecureRandom和来自熵数据的安全密码生成器

    securerandom:制作一个随机的十六进制字符串

    安全随机 这将生成一个随机的十六进制字符串。... var SecureRandom = require('securerandom'); console.log(SecureRandom.hex(12)); // prints a random 12 byte string 测试 npm test 贡献 欢迎。

    Java使用AES加密和解密的实例详解

    也可以不指定SecureRandom对象的种子,这样每次生成出来的密钥都可能是不一样的。 在Java中,AES加密和解密的逻辑大致如下: 1. 生成/获取密钥 2. 加/解密 生成密钥的过程中可以指定固定的种子,每次生成出来的...

    解决任Weblogic 在Linux启动慢的问题

    可以修改 Linux 上 Weblogic 使用的 JDK 的安全配置文件 $JAVA_HOME/jre/lib/security/java.security,将“securerandom.source=file:/dev/urandom”修改为“securerandom.source=file:/dev/./urandom”。...

    随机生成11位数字

    - **安全性**:虽然`Math.random()`生成的随机数足够用于大多数情况,但对于安全性要求极高的场景(如密码生成),可能需要使用更安全的随机数生成器,如`SecureRandom`类。 #### 6. 扩展与应用 - **扩展**:如果...

    HTTPS TLS1.2密码套件

    核心代码TlsClientProtocol protocol = new TlsClientProtocol(tcpClient.GetStream(), new Org.BouncyCastle.Security.SecureRandom()); MyTlsClient client = new MyTlsClient(); protocol.Connect(client);

    ApigeeEdge-Java-SecureRandom:使用java.security.SecureRandom在Apigee Edge策略内生成伪随机数的Java标注

    标注使用java.security.SecureRandom在策略Apigee Edge代理内生成随机数(int,UUID或高斯值),并使用该信息设置上下文变量。免责声明此示例不是正式的Google产品,也不是正式的Google产品的一部分。使用此标注您...

    secure-random-uniform:生成安全,随机,统一的整数,以补偿模偏差

    secure-random-uniform 生成安全,随机,统一的整数,以补偿模偏差用法var secureRandom = require ( 'secure-random-uniform' )// Numbers from [0, 2000)secureRandom ( 2000 )// Numbers from [100, 110)...

    AES在windows下正常加解密,Linux下加密正常,解密异常(javax.crypto.BadPaddingExcepti

    * 所以 SecureRandom securerandom = new SecureRandom(tohash256Deal(key)); 替换为下面内容 * 以适应linux的变化 */ KeyGenerator keygen=KeyGenerator.getInstance("AES"); SecureRandom securerandom = new ...

    JAVA 16位ID生成工具类含16位不重复的随机数数字+大小写

    JAVA中提供了多种方式来生成随机数,包括使用java.util.Random类、java.security.SecureRandom类和java.util.concurrent.ThreadLocalRandom类。其中,SecureRandom类是最安全的随机数生成方式,因为它使用了加密强...

    struts2源码解析,个人感觉很不错

    ### Struts2源码解析及工作原理 #### Struts2简介 Struts2是一个流行的Java Web应用程序框架,它继承和发展了Struts1.x的一些特性,同时又采用了WebWork框架的核心技术,使得Struts2在设计理念和技术实现上都有了...

    java 随机数.docx

    // 使用 SecureRandom 类生成安全的随机数 try { java.security.SecureRandom secureRandom = new java.security.SecureRandom(); byte[] secureBytes = new byte[5]; secureRandom.nextBytes(secureBytes); System...

    Java获取随机字符串

    - 可以通过调用`SecureRandom.getInstance()`方法获取`SecureRandom`实例。 - 如果指定了算法和提供者,则可以通过`SecureRandom.getInstance(algorithm, provider)`来获取实例。 - 需要注意的是,如果指定的算法...

    快速解决Tomcat启动慢的问题,超简单

    默认情况下,它会根据`java.security.egd`或`securerandom.source`属性来决定随机数源。如果没有设置,Java会使用操作系统提供的默认源,通常在Linux上就是`/dev/random`。 3. **随机数源对比**: - `/dev/random`...

    SHA1PRNG_SecureRandomImpl.rar_BR_SHA1PRNG_class

    `SecureRandomSpi`类是Java加密API(Java Cryptography Architecture, JCA)中的一个服务提供者接口,它定义了`SecureRandom`类的抽象方法。`SecureRandom`类是用来生成高质量随机数的,其安全性比Java的默认随机数...

    android源码随机数

    SecureRandom secureRandom = new SecureRandom(); int secureNumber = secureRandom.nextInt(); ``` 3. **系统时间作为种子** 为了确保每次程序运行时得到不同的随机序列,通常会用当前时间作为随机数生成器的...

Global site tag (gtag.js) - Google Analytics