栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python

(一). 线性同余法 生成伪随机数_算法 1.线性同余法原理:(见下图)

2.示例:(a=12,c=8,m=22,X0=6)

{14,0,8,16,2,10,18,4,12,20,6…} 利用线性同余法产生此随机序列,序列周期为11

3.代码实现
def random1():
    global x0
    x0 = x0 * a + c   #线性同余法规则
    return int(x0 % m)

if __name__=='__main__':
    a = int(input("请输入a(0=))
    c = int(input("请输入c(0=0):"))
    x0 = int(input("请输入x0(0= 
演示 

a=1103515245 , c =12345 , m=666 , x =222

4.小结 各位童鞋在利用此算法生成随机数序列时需注意一点,就是序列周期,有可能会大于你所划定的计算次数,此时就会出现序列周期为0的情况,所以各位童鞋在使用时尽量将计算次数选大一点(图中我选的是50次) (二).BBS伪随机数比特产生器 1.原理 寻找两个大素数p, q, 满足 p ≡ q ≡ 3(mod 4) 设n=pq, 找一个随机数s(这里我们称之为种子seed), s和n互素,即gcd(s,n)=1,令 X0 = s^2 mod n(如下图所示)

2.示例:(p=101,q=409,s=101009)

3.代码实现
def bbs(n,s):
    x = []
    x.append(s**2%n)
    B = []
    for i in range(1,100): #设定产生100个随机比特位
        num = x[i-1]**2%n
        x.append(num)
        B.append(x[i]%2)
    print(B)
    
if __name__=='__main__':
    p=int(input("请输入p(素数):"))
    q=int(input("请输入q(素数):"))
    s=int(input("请输入s(s与p*q互素):"))
    bbs(p*q,s)
演示

p= 157 ,q = 409 , s = 101197

4.小结 BBS随机比特产生器的安全性是依赖于大素数难以分解,与RSA算法所依托的安全性类似
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/857663.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号