|
发表于 2020-5-13 21:15:01
|
显示全部楼层
先看看你的序列为何如此脆弱
f(1) = 6, f(2) = 15, f(3) = 28, f(4) = 45 ....
==> f(2)-f(1) = 9; f(3)-f(2) = 13 ; f(4)-f(3) = 17; f(5)-f(4) = 21 ...
=> 13-9 = 4, 17-13 = 4, 21-17 = 4 .... 显然是一个等差数列
=> f(n)-f(n-1) = 4(n-1)+5 (n>1). 由此递推关系,就可以得出结果了。
推倒如下:
f(2)- f(1) = 4*1+5 ;
f(3)- f(2) = 4*2+5;
f(4)- f(3) = 4*3+5;
...
f(n)-f(n-1) = 4*(n-1)+5;
将上面的各式相加 => f(n)-f(1) = 2n*n +3n-5, 注意到 f(1) = 6.
所以 f(n) = 2n*n+3n+1
就你的需求而言,你需要一个非线性的伪随机书发生器。一个简单的办法是自己定义一个大的表格,里面的数据是预先定义,随即并且是非线性的(发挥自己的想象:))。
然后用rand(n),(n=1,2,...)产生一个数,用这个数的偶数位确定行,奇数位确定列,然后取出表格中的值即可。
这个办法的关键是这个表格的内容必须是安全的,如果别人反汇编,这个方法是徒劳的...
如果你对安全需要的很高,那么你需要的是密码学安全的伪随机数发生器,你可以上网搜索 PRNG,有不少现成的实现(大部分是国外的密码学专家写的),可以保证国家安全局拿你的程序也没办法。
|
|