BSS随机数发生器-C语言实现

        BSS(Blum Blum Shub)算法是一种产生安全伪随机数的方法,其安全性基于对n的因子分解的困难性,即给定n,不能确定其素因子p和q。

算法

(1) 选择两大素数p和q作为随机种子,要求它们被4除时都余3,即p\equiv q\equiv 3\ mod\ 4

(2) 令n=p\times q,选择一个随机数 s ,使得gcd(s,n)=1

(3 )x_{0}=s^{2} \mod\ n

(4) i从1开始,不断重复以下操作,直到i经过逐次加1后超过l:

① x_{i}=x_{i-1}^{2} \mod\ n   ;

② b_{i}=x_{i} \mod\ 2,即每次迭代都取出x_{i}最低位的比特;

③ 输出b_{i}

代码

#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;
}

结果

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值