java generateNum用法_java11教程--类SecureRandom用法

该类提供加密强随机数生成器(RNG)。

此外, SecureRandom必须产生非确定性输出。 因此,传递给SecureRandom对象的任何种子材料必须是不可预测的,并且所有SecureRandom输出序列必须加密强,如RFC 4086: Randomness Requirements for Security中所述 。

许多SecureRandom实现采用伪随机数生成器(PRNG,也称为确定性随机比特生成器或DRBG)的形式,这意味着它们使用确定性算法从随机种子生成伪随机序列。 其他实现可以产生真正的随机数,而其他实现可以使用两种技术的组合。

调用者通过无参数构造函数或getInstance方法之一获取SecureRandom实例。 例如:

SecureRandom r1 = new SecureRandom();

SecureRandom r2 = SecureRandom.getInstance("NativePRNG");

SecureRandom r3 = SecureRandom.getInstance("DRBG",

DrbgParameters.instantiation(128, RESEED_ONLY, null));

上面的第三个语句返回支持特定实例化参数的特定算法的SecureRandom对象。 实现的有效实例化参数必须与此最小请求匹配,但不一定相同。 例如,即使请求不需要某个特征,实际的实例化也可以提供该特征。 实现可能会懒惰地实例化SecureRandom直到它实际使用,但有效的实例化参数必须在创建后立即确定,并且getParameters()应始终保持不变的相同结果。

SecureRandom典型调用SecureRandom调用以下方法来检索随机字节:

SecureRandom random = new SecureRandom();

byte[] bytes = new byte[20];

random.nextBytes(bytes);

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

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

新创建的PRNG SecureRandom对象不是种子(除非它是由SecureRandom(byte[])创建的)。 第一次调用nextBytes将强制它从特定于实现的熵源中播种。 如果先前调用了setSeed则不会发生这种自播种。

甲SecureRandom可以在任何时候通过调用补种reseed或setSeed方法。 reseed方法从其熵源读取熵输入以重新定位自身。 setSeed方法要求调用者提供种子。

请注意: reseed并非所有支持SecureRandom实现。

注意:根据实施, generateSeed , reseed和nextBytes方法可阻止作为熵被收集,例如,如果源熵是/ dev /上的各种类Unix操作系统随机的。

线程安全

SecureRandom对象可安全使用多个并发线程。

构造一个实现默认随机数算法的安全随机数发生器(RNG)。

构造一个实现默认随机数算法的安全随机数发生器(RNG)。

创建一个

SecureRandom对象。

返回给定的种子字节数,使用此类用于种子自身的种子生成算法计算。

返回此

SecureRandom对象实现的算法的名称。

返回实现指定的随机数生成器(RNG)算法的

SecureRandom对象。

返回实现指定的随机数生成器(RNG)算法的

SecureRandom对象。

返回实现指定的随机数生成器(RNG)算法的

SecureRandom对象。

返回实现指定的随机数生成器(RNG)算法的

SecureRandom对象,并支持指定的

SecureRandomParameters请求。

返回实现指定的随机数生成器(RNG)算法的

SecureRandom对象,并支持指定的

SecureRandomParameters请求。

返回实现指定的随机数生成器(RNG)算法的

SecureRandom对象,并支持指定的

SecureRandomParameters请求。

返回使用securerandom.strongAlgorithms Security属性中指定的算法/提供程序选择的SecureRandom对象。

SecureRandom对象的提供程序。

返回给定的种子字节数,使用此类用于种子自身的种子生成算法计算。

生成一个包含用户指定数量的伪随机位的整数(右对齐,前导零)。

生成用户指定的随机字节数。

使用其他参数生成用户指定数量的随机字节。

使用从其熵源读取的熵输入重新选择此

SecureRandom 。

使用附加参数从其熵源读取的熵输入重新选择此

SecureRandom 。

使用给定的种子重新种植此随机对象。

使用给定

long seed包含的八个字节重新设置此随机对象。

返回此

SecureRandom的人类可读字符串表示

SecureRandom 。

构造一个实现默认随机数算法的安全随机数发生器(RNG)。

此构造函数遍历已注册的安全提供程序列表,从最首选的提供程序开始。 将SecureRandomSpi从第一个支持SecureRandom (RNG)算法的Provider封装SecureRandomSpi实现的新SecureRandom对象。 如果没有提供者支持RNG算法,则返回特定于实现的默认值。

构造一个实现默认随机数算法的安全随机数发生器(RNG)。

SecureRandom实例以指定的种子字节播种。

此构造函数遍历已注册的安全提供程序列表,从最首选的提供程序开始。 将SecureRandomSpi从第一个支持SecureRandom (RNG)算法的Provider封装SecureRandomSpi实现的新SecureRandom对象。 如果没有提供者支持RNG算法,则返回特定于实现的默认值。

请注意,可以通过Security.getProviders()方法检索已注册提供程序的列表。

SecureRandom对象。

返回实现指定的随机数生成器(RNG)算法的SecureRandom对象。

此方法遍历已注册的安全提供程序列表,从最首选的提供程序开始。 将SecureRandomSpi从第一个支持指定算法的Provider封装SecureRandomSpi实现的新SecureRandom对象。

返回实现指定的随机数生成器(RNG)算法的SecureRandom对象。

将返回从指定提供程序封装SecureRandomSpi实现的新SecureRandom对象。 必须在安全提供程序列表中注册指定的提供程序。

返回实现指定的随机数生成器(RNG)算法的SecureRandom对象。

将SecureRandom一个新的SecureRandom对象,该对象封装了指定的Provider对象中的SecureRandomSpi实现。 请注意,指定的Provider对象不必在提供程序列表中注册。

返回实现指定的随机数生成器(RNG)算法的SecureRandom对象,并支持指定的SecureRandomParameters请求。

此方法遍历已注册的安全提供程序列表,从最首选的提供程序开始。 将SecureRandom一个新的SecureRandom对象,该对象从第一个支持指定算法的Provider和指定的SecureRandomParameters封装SecureRandomSpi实现。

请注意,可以通过Security.getProviders()方法检索已注册提供程序的列表。

返回实现指定的随机数生成器(RNG)算法的SecureRandom对象,并支持指定的SecureRandomParameters请求。

将返回从指定提供程序封装SecureRandomSpi实现的新SecureRandom对象。 必须在安全提供程序列表中注册指定的提供程序。

返回实现指定的随机数生成器(RNG)算法的SecureRandom对象,并支持指定的SecureRandomParameters请求。

将SecureRandom一个新的SecureRandom对象,该对象封装了指定的Provider对象中的SecureRandomSpi实现。 请注意,指定的Provider对象不必在提供程序列表中注册。

返回此

SecureRandom对象的提供程序。

返回此

SecureRandom对象实现的算法的名称。

返回此

SecureRandom的人类可读字符串表示

SecureRandom 。

返回值可以与传递到getInstance方法的SecureRandomParameters对象不同,但在此SecureRandom对象的生命周期内不能更改。

调用者可以使用返回的值来查找此SecureRandom支持的功能。

使用给定的种子重新种植此随机对象。

种子补充而不是替代现有的种子。

因此,保证重复呼叫永远不会减少随机性。

一个PRNG SecureRandom如果不会自动种子本身setSeed之前任何所谓的nextBytes或reseed电话。 调用者应确保seed参数包含足够的熵以保证此SecureRandom的安全性。

使用给定long seed包含的八个字节重新设置此随机对象。

给定的种子补充而不是替代现有的种子。

因此,保证重复呼叫永远不会减少随机性。

定义此方法是为了与java.util.Random兼容。

生成用户指定的随机字节数。

使用其他参数生成用户指定数量的随机字节。

生成一个包含用户指定数量的伪随机位的整数(右对齐,前导零)。

此方法重写一个java.util.Random方法,以及用于提供随机比特的源到所有的从类继承的方法(例如, nextInt , nextLong ,和nextFloat )。

返回给定的种子字节数,使用此类用于种子自身的种子生成算法计算。

该调用可用于播种其他随机数生成器。

此方法仅用于向后兼容。 建议调用者使用备用getInstance方法之一获取SecureRandom对象,然后调用generateSeed方法从该对象获取种子字节。

返回给定的种子字节数,使用此类用于种子自身的种子生成算法计算。

该调用可用于播种其他随机数生成器。

返回使用securerandom.strongAlgorithms Security属性中指定的算法/提供程序选择的SecureRandom对象。

某些情况需要强大的随机值,例如在创建RSA公钥/私钥等高价值/长期密码时。 为了帮助指导应用程序选择合适的强大的SecureRandom实现,Java发行版包含securerandom.strongAlgorithms Security属性中已知的强大的SecureRandom实现列表。

Java平台的每个实现都需要支持至少一个强大的SecureRandom实现。

使用从其熵源读取的熵输入重新设定此

SecureRandom 。

使用附加参数从其熵源读取的熵输入重新选择此SecureRandom 。

注意,熵是从熵源获得的。 虽然params一些数据可能包含熵,但其主要用途是提供多样性。

构造方法

变量

构造器

描述

构造一个实现默认随机数算法的安全随机数发生器(RNG)。

构造一个实现默认随机数算法的安全随机数发生器(RNG)。

protected

创建一个

SecureRandom对象。变量和类型

方法

描述

byte[]

返回给定的种子字节数,使用此类用于种子自身的种子生成算法计算。

返回此

SecureRandom对象实现的算法的名称。

返回实现指定的随机数生成器(RNG)算法的

SecureRandom对象。

返回实现指定的随机数生成器(RNG)算法的

SecureRandom对象。

返回实现指定的随机数生成器(RNG)算法的

SecureRandom对象。

返回实现指定的随机数生成器(RNG)算法的

SecureRandom对象,并支持指定的

SecureRandomParameters请求。

返回实现指定的随机数生成器(RNG)算法的

SecureRandom对象,并支持指定的

SecureRandomParameters请求。

返回实现指定的随机数生成器(RNG)算法的

SecureRandom对象,并支持指定的

SecureRandomParameters请求。

返回使用securerandom.strongAlgorithms Security属性中指定的算法/提供程序选择的SecureRandom对象。

返回此

SecureRandom对象的提供程序。

static byte[]

返回给定的种子字节数,使用此类用于种子自身的种子生成算法计算。

protected int

生成一个包含用户指定数量的伪随机位的整数(右对齐,前导零)。

void

生成用户指定的随机字节数。

void

使用其他参数生成用户指定数量的随机字节。

void

使用从其熵源读取的熵输入重新选择此

SecureRandom 。

void

使用附加参数从其熵源读取的熵输入重新选择此

SecureRandom 。

void

使用给定的种子重新种植此随机对象。

void

使用给定

long seed包含的八个字节重新设置此随机对象。

返回此

SecureRandom的人类可读字符串表示

SecureRandom 。

下面是一个通用的Java Https请求工具: ``` import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSocketFactory; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.ConnectException; import java.net.URL; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; public class HttpsUtil { private static class TrustAnyTrustManager implements X509TrustManager { public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { } public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { } public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[]{}; } } public static String get(String url) throws Exception { URL u = new URL(url); HttpsURLConnection conn = (HttpsURLConnection) u.openConnection(); SSLContext sslContext = SSLContext.getInstance("SSL"); sslContext.init(null, new TrustManager[]{new TrustAnyTrustManager()}, new java.security.SecureRandom()); SSLSocketFactory ssf = sslContext.getSocketFactory(); conn.setSSLSocketFactory(ssf); conn.setDoOutput(true); conn.setDoInput(true); conn.setRequestMethod("GET"); conn.connect(); InputStream is = conn.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8")); StringBuilder sb = new StringBuilder(); String line; while ((line = br.readLine()) != null) { sb.append(line); } br.close(); is.close(); conn.disconnect(); return sb.toString(); } public static String post(String url, String param) throws Exception { URL u = new URL(url); HttpsURLConnection conn = (HttpsURLConnection) u.openConnection(); SSLContext sslContext = SSLContext.getInstance("SSL"); sslContext.init(null, new TrustManager[]{new TrustAnyTrustManager()}, new java.security.SecureRandom()); SSLSocketFactory ssf = sslContext.getSocketFactory(); conn.setSSLSocketFactory(ssf); conn.setDoOutput(true); conn.setDoInput(true); conn.setRequestMethod("POST"); conn.connect(); conn.getOutputStream().write(param.getBytes("UTF-8")); InputStream is = conn.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8")); StringBuilder sb = new StringBuilder(); String line; while ((line = br.readLine()) != null) { sb.append(line); } br.close(); is.close(); conn.disconnect(); return sb.toString(); } } ``` 这个工具可以进行Https的GET和POST请求,并且支持自签名证书。使用方法如下: ``` String url = "https://example.com/api"; String result = HttpsUtil.get(url); ``` ``` String url = "https://example.com/api"; String param = "name=value"; String result = HttpsUtil.post(url, param); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值