Make sure that using this pseudorandom number generator is safe here.

2023-11-29 08:45

本文主要是介绍Make sure that using this pseudorandom number generator is safe here.,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

问题类型:安全热点

安全问题级别:MEDIUM

一、问题代码

工具类Package:

Java commons-lang3 库 RandomUtils 随机数工具类

import org.apache.commons.lang3.RandomUtils;

用法:

RandomUtils.nextInt(0, 999999999) //生成 0 - Integer.MAX_VALUE 范围的随机数

Random()有安全隐患,相同的种子生成的结果一样,攻击者可能会猜测到下一个结果。

如果在密码相关领域需要使用SecureRandom(),相同的种子,生成的结果也不一样。

二、风险问题

使用伪随机数发生器(PRNG)是安全敏感的。例如,它在过去导致了以下漏洞:

  • CVE-2013-6386
  • CVE-2006-3419
  • CVE-2008-4102

当软件在需要不可预测性的上下文中生成可预测值时,攻击者可能会猜测将生成的下一个值,并使用此猜测来模拟其他用户或访问敏感信息。

由于java.util.Random类依赖于伪随机数生成器,因此此类和相关的java.lang.Math.Random()方法不应用于安全关键应用程序或保护敏感数据。在这种情况下,应该适当使用java.security.SecureRandom类,该类依赖于加密强随机数生成器(RNG)。

三、如何修复

该问题主要关注随机数的用途是否涉及敏感信息,比如电子钱包、密码、token等。普通的生成随机数字暂可以认为safe。

推荐的安全编码实践

使用“java.security.SecureRandom”之类的加密强随机数生成器(RNG)代替此PRNG。

仅使用生成的随机值一次。

不应公开生成的随机值。如果必须存储它,请确保数据库或文件是安全的。

符合要求的解决方案

SecureRandom random = new SecureRandom(); // Compliant for security-sensitive use cases
byte bytes[] = new byte[20];
random.nextBytes(bytes);

这篇关于Make sure that using this pseudorandom number generator is safe here.的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/432177

相关文章

usaco 1.2 Name That Number(数字字母转化)

巧妙的利用code[b[0]-'A'] 将字符ABC...Z转换为数字 需要注意的是重新开一个数组 c [ ] 存储字符串 应人为的在末尾附上 ‘ \ 0 ’ 详见代码: /*ID: who jayLANG: C++TASK: namenum*/#include<stdio.h>#include<string.h>int main(){FILE *fin = fopen (

题目1380:lucky number

题目1380:lucky number 时间限制:3 秒 内存限制:3 兆 特殊判题:否 提交:2839 解决:300 题目描述: 每个人有自己的lucky number,小A也一样。不过他的lucky number定义不一样。他认为一个序列中某些数出现的次数为n的话,都是他的lucky number。但是,现在这个序列很大,他无法快速找到所有lucky number。既然

Jenkins 通过 Version Number Plugin 自动生成和管理构建的版本号

步骤 1:安装 Version Number Plugin 登录 Jenkins 的管理界面。进入 “Manage Jenkins” -> “Manage Plugins”。在 “Available” 选项卡中搜索 “Version Number Plugin”。选中并安装插件,完成后可能需要重启 Jenkins。 步骤 2:配置版本号生成 打开项目配置页面。在下方找到 “Build Env

利用Mybatis-generator工具自动生成代码

配置JAVA环境变量; 执行生成代码之前,我们须要做的准备工作。  1、新建一个文件夹,作为我们的工作空间,例如:  D:\generator  注意:这里的路径不要带有中文字符,这是规范,即使带有中文字符不会出什么问题。  2、在 generator 这路径下  (1)放置 mybatis-generator-core-1.3.2.jar;  (2)放置 mysql-connector-ja

gcc make cmake例程

main.cpp文件: #include <iostream>#include "utils.h"int main(void) {int a = 1;int b = 2;int c = AddFunc(a, b);std::cout<< c <<std::endl;return 0;} utils.h文件: #pragma onceint AddFunc(int a, int b);

每天一道面试题(2):fail-safe 机制与 fail-fast 机制分别有什么作用?

当谈论Java集合的 fail-fast 和 fail-safe 机制时,涉及的是在集合被并发修改时的行为和处理方式。这些机制对保证程序的正确性和稳定性非常重要,尤其是在多线程环境中。 1. Fail-Fast 机制 定义: Fail-fast 机制的核心是在检测到集合在遍历过程中被修改时,立即抛出 ConcurrentModificationException 异常,从而中断迭代操作。这种

【Hdu】Minimum Inversion Number(逆序,线段树)

利用线段树在nlogn的时间复杂度内求一段数的逆序。 由于给的序列是由0 ~ n -1组成的,求出初始的逆序之后可以递推出移动之后的逆序数。 #include<cstdio>#include<iostream>#include<cstring>#include<algorithm>using namespace std;typedef long long LL;const in

解决PHP Warning: strftime(): It is not safe to rely on the system's timezone set

当运行一些程序时,在httpd日志中会有如下警告日志: PHP Warning:  strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set(

【JavaScript】基本数据类型与引用数据类型区别(及为什么String、Boolean、Number基本数据类型会有属性和方法?)

基本数据类型   JavaScript基本数据类型包括:undefined、null、number、boolean、string。基本数据类型是按值访问的,就是说我们可以操作保存在变量中的实际的值。 1)基本数据类型的值是不可变的 任何方法都无法改变一个基本类型的值,比如一个字符串: var name = "change";name.substr();//hangconsole.log

编程开发之make

make命令是GNU的工程化编译工具,用于编译众多相互关联的源代码问价,以实现工程化的管理,提高开发效率。 语法 make(选项)(参数)  选项  -f:指定“makefile”文件;  -i:忽略命令执行返回的出错信息; -s:沉默模式,在执行之前不输出相应的命令行信息;  -r:禁止使用build-in规则;  -n:非执行模式,输出所有执行命令,但并不执行;  -t:更新目