php 中文bytes,PHP random_bytes 用法 手册 | 示例代码

Simple php implementation of Blum Blum Shub.

$bbs= newBlumBlumShub(400);var_dump(bin2hex($bbs->getRandomPseudoBytes(32)));// out like 02b3b55d6aea2f26a0ddfcd8967597fb0d38d7c6c4027f0595f5a614b9f06400classBlumBlumShub{

private$p,$q,$s,$m,$init,$x0;

private$size=1024;

public function__construct($size=false,$p=false,$q=false,$s=false)

{

if($p!==false&&$q!==false&&$s!==false)

{$this->p=$p;$this->q=$q;$this->m=bcmul($p,$q);$this->s=$s;

} else {

if($size!==false)$this->size=$size;$this->init();

}$this->xn=bcmod(bcmul($this->s,$this->s),$this->m);

for($i=0;$i<10;$i++)$this->xn=bcmod(bcmul($this->xn,$this->xn),$this->m);

}

private functioninit()

{$this->p=$this->genPrime();$this->q=$this->genPrime();$this->m=bcmul($this->p,$this->q);$mCoPrime=gmp_init($this->m);# try find co-primewhile(1)

{$s=genPrime($this->size);$sCoPrime=gmp_init($s);$g=gmp_gcdext($mCoPrime,$sCoPrime);$g=gmp_strval($g['g']);

if($g==='1')

break;

}$this->s=$s;

}

public functiongenPrime()

{

while(1)

{$min=gmp_init(str_pad('1',$this->size,'0'));$max=gmp_init(str_pad('9',$this->size,'0'));$prime=gmp_strval(gmp_random_range($min,$max));$validate=bcmod($prime,'4');

if($validate==='3')

break;

}

return$prime;

}

public functiongetRandomPseudoBytes($length)

{$bytes='';

for($i=0;$igetByte();

return$bytes;

}

public functiongetByte()

{$byte='';

for($i=0;$i<8;$i++) {$this->xn=bcmod(bcmul($this->xn,$this->xn),$this->m);$byte.=substr(decbin($this->xn[strlen($this->xn)-1]), -1);

}

returnchr(bindec($byte));

}

}?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值