资源简介

0、可直接复制执行 1、生成1024比特的随机大整数 2、对该整数进行小素数检验,在进行miller_rabin算法检测 3、获得大素数p、q后,计算n、e、的d过程有说明 4、可以对任意数字字母汉字加解密 5、内容的注释详细,易理解;用像伪代码般的python码出来的更容易对代码转换

资源截图

代码片段和文件信息

import math
from functools import reduce    #用于合并字符
from os import urandom          #系统随机的字符
import binascii         #二进制和ASCII之间转换

#===================================================
def Mod_1(xn):
        ‘‘‘取模负1的算法:计算x2= x^-1 (mod n)的值,
r = gcd(a b) = ia + jb x与n是互素数‘‘‘
        x0 = x  
        y0 = n
        x1 = 0
        y1 = 1
        x2 = 1
        y2 = 0
        while n != 0:
                q = x // n
                (x n) = (n x % n)
                (x1 x2) = ((x2 - (q * x1)) x1)
                (y1 y2) = ((y2 - (q * y1)) y1)
        if x2 < 0:
                x2 += y0 
        if y2 < 0:
                y2 += x0 
        return x2      
#===================================================
def Fast_Mod(apm):
        ‘‘‘快速取模指数算法:计算 (a ^ p) % m 的值‘‘‘
        apm=int(a)int(p)int(m)
        if (p == 0) :
                return 1
        r = a % m
        k = 1
        while (p > 1):
                if ((p & 1)!=0):
                        k = (k * r) % m
                r = (r * r) % m
                p >>= 1
        return (r * k) % m
#===================================================
def randint(n):
        ‘‘‘random是伪随机数,需要更高安全的随机数产生,
所以使用os.urandom()或者SystmeRandom模块,
生成n字节的随机数(8位/字节)返回16进制转为10进制整数返回‘‘‘
        randomdata = urandom(n)
        return int(binascii.hexlify(randomdata)16)    
#===================================================
def primality_testing_1(n):
        ‘‘‘测试一,小素数测试,用100以内的小素数检测随机数x,
可以很大概率排除不是素数#创建有25个素数的元组‘‘‘
        Sushubiao=(2357111317192329313741
                   434753596167717379838997)
        for y in Sushubiao:
                if n%y==0:
                        return False
        return True
#===================================================
def primality_testing_2(n k):
        ‘‘‘测试二用miller_rabin算法对n进行k次检测‘‘‘
        if n < 2:
                return False
        d = n - 1
        r = 0
        while not (d & 1):
                r += 1
                d >>= 1
        for _ in range(k):
                a = randint(120)        

评论

共有 条评论