标题: 不用%random%或!random!产生随机数 [打印本页]
作者: 悬崖之树 时间: 2013-2-5 22:02 标题: 不用%random%或!random!产生随机数
如题,谁能做到?加分!!
作者: Demon 时间: 2013-2-5 22:25
http://demon.tw/reverse/cmd-internal-random.html
作者: CrLf 时间: 2013-2-5 22:34
参考以下两贴:
跟踪CMD中的随机数%random%中已经提到 random 是以时间为随机数种子,以及如何运算获得伪随机数。
可以看到这种算法是“有损”的,很难通过现有 %random% 逆推获得种子值
但可获取启动时间来换算随机数种子初始值,参考此贴:批处理技术内幕:随机数%RANDOM%
其实自己随便取个种子也口以啊:- @echo off&setlocal enabledelayedexpansion
- set r=1!time:~-1!2!time:~-2!
- ::定义种子,这里就直接把产生的伪随机数当成种子来用了,虽然它们实际上是分开的...
- for /l %%a in () do (
- set /a "r=(r*0x343fd+0x269ec3>>0x10)&0x7fff"
- echo !r!
- )
- ::常数还是尊重ms的设置,想来他们取这几个值一定是有所考虑的
- pause
复制代码
作者: 523066680 时间: 2013-2-5 22:41
本帖最后由 523066680 于 2013-2-5 22:42 编辑
随机数总是和时间相关连的
谁能制造随机数而不引用时间值,加分。
作者: 悬崖之树 时间: 2013-2-7 21:55
我这个方法不用系统时间:- @echo off&setlocal enabledelayedexpansion
- rem 本生成随机数的方法是截取系统中文件大小数据的前四位,硬盘上的文件越多,生成的随机数就越
- 多
- for %%i in (c d e f g h i j k l m n o p q r s t u v w x y z) do (
- if exist %%i:\ (
- %%i:&cd\
- for /f %%i in ('dir /a-d /b /s') do (
- if %%~zi gtr 999 (
- set num=%%~zi
- echo !num:~,4!
- set /a n+=1
- )
- )
- )
- )
- echo.
- echo 不好意思,共生成随机数%n%个!
- pause>nul
复制代码
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |