请选择 进入手机版 | 继续访问电脑版

专注代码检测 - 阅镜

 找回密码
 立即注册
热搜: 安装 代码
查看: 82|回复: 0

自己实现的rand范围不应过小

[复制链接]

70

主题

70

帖子

230

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
230
发表于 2021-9-10 20:08:27 | 显示全部楼层 |阅读模式
如果在弱安全场景相关的算法中自己实现了PRNG,请确保rand出来的随机数不会很小或可预测。

  1. // Bad
  2. int32_t val = ((state[0] * 1103515245U) + 12345U) & 999999;
复制代码

上述例子可能想生成0~999999共100万种可能的随机数,但是999999的二进制是11110100001000111111,与&运算后,0位一直是0,所以生成出的范围明显会小于100万种。

  1. // Good
  2. int32_t val = ((state[0] * 1103515245U) + 12345U) % 1000000;
复制代码

  1. // Good
  2. int32_t val = ((state[0] * 1103515245U) + 12345U) & 0x7fffffff;
复制代码


关联漏洞:
  1.   高风险-逻辑漏洞
复制代码
回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

QQ|Archiver|手机版|小黑屋| 阅镜 ( 京ICP备2020034574号 )|网站地图|网站地图点击这里给我发消息

GMT+8, 2021-10-27 01:52 , Processed in 0.376914 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表