BSS(Blum Blum Shub)算法是一种产生安全伪随机数的方法,其安全性基于对n的因子分解的困难性,即给定n,不能确定其素因子p和q。
算法
(1) 选择两大素数p和q作为随机种子,要求它们被4除时都余3,即
(2) 令,选择一个随机数 s ,使得
(3 )
(4) i从1开始,不断重复以下操作,直到i经过逐次加1后超过l:
① ;
② ,即每次迭代都取出
最低位的比特;
③ 输出
代码
#include<stdio.h>
#include<stdlib.h>
long long Blum,BLum,Shub;
#define RAND_MAX 65536
#define BLUM 11
#define SHUB 19
int seed(int);
int (* rand)(int)=seed;
int blumblumshub(int shub)
{
BLum=0;
while(shub)
{
Blum=(Blum*Blum)%Shub;
BLum=(BLum<<1)|(Blum&1);
shub>>=1;
}
return BLum>>1;
}
int seed(int n)
{
Blum=n,BLum=BLUM;
Shub=SHUB*BLum;
rand=blumblumshub;
return rand(n);
}
int main(int argv,char* arg[]){
int i;
for(i=0;i<10;i++)
{
printf("%d\n",rand(97));
}
system("pause"); // 防止运行后自动退出,需头文件stdlib.h
return 0;
}
结果