Rsa

Posted by kifish on March 20, 2017

HCF of n and e (which is 1),n,e 互质。  a,p互质(即两者只有一个公约数1)  不是说两者为素数。 两个数的公因数只有1的两个非零自然数,叫做互质数。 http://www.freebuf.com/articles/terminal/101200.html   mypow2(a, int(dlist[0])*(pow(2, iter)), n) mypow2(a, int(dlist[0])*(2**iter), n) 竟然输出不一样,浮点数的问题?

def binary_digits(n):
# initialize bit list
	bits = []
while n>0:
		# calculate last binary digit of current value of n
		last_bit = n%2
		# append to bit list
		bits.append(last_bit)
		# updata n
		n = n/2
return  bits
import time
start = time.time()
def mypow1(a,b,c):
	return_value = 1
	for i in range(1,b+1):
		return_value = (return_value*a) % c
	return return_value
end = time.time()
time_elapsed = int(end - start)
print time_elapsed
from binary_digits import binary_digits
import math
import time
start = time.time()
def mypow2(a, b, c):
    return_value = 1
    multiplier = a
    # temp = binary_digits(b)
    # digits = temp[::-1]
    digits = binary_digits(b)
    for digit in digits:
        if digit == 1:
            return_value = (return_value * multiplier) % c
        else:
            return_value = return_value
        multiplier = (multiplier * multiplier) % c
return return_value
# end = time.time()
# time_elapsed = int(end - start)
# print time_elapsed
#print mypow2(2,63,2017)
# -*- coding: utf-8 -*-       #设置python文件的编码为utf-8,这样就可以写入中文注释
from binary_digits import *
from mypow2 import *
from math import *
def extended_hcf(a, b):
    # initialize
    p1, q1, h1 = 1, 0, a
    p2, q2, h2 = 0, 1, b
# loop while h2 > 0
    while h2 > 0:
        r = h1 / h2
        p3, q3, h3 = p1 - r*p2, q1 - r*q2, h1 - r*h2
        p1, q1, h1, p2, q2, h2 = p2, q2, h2, p3, q3, h3
return (p1, q1, h1)
#n=pow(5,15)
#e=pow(3,11)
#print extended_hcf(n, e)
def mrf(n,a):
    s=1
    k=1
    slist=[]
    dlist=[]
    list=[]
    while k<n:
        k = 2**s
        d = divmod((n-1), k)[0]
        flag = divmod((n-1), k)[1]
        if not flag and (d % 2) == 1:
            dlist.append(d)
            slist.append(s)
        s=s+1
    for r in range(0,slist[0]):
        temp = mypow2(a,int(dlist[0])*(2**r),n)
        list.append(temp)
    return (slist,dlist,list)
def miller_rabin_test(n,a):
    flag = 0
    slist = mrf(n,a)[0]
    dlist = mrf(n,a)[1]
    list  = mrf(n,a)[2]
    Test  = []
    print slist
    print dlist
    print list
    if mypow2(a,int(dlist[0]),n)==1:
        flag = 1
        return bool(flag)
    for iter in range(0, slist[0]):
        Test.append(mypow2(a, int(dlist[0])*(2**iter), n))  ###?pow 出问题
        print Test
        if mypow2(a, int(dlist[0])*(2**iter), n) == n-1:
            flag=1
            break
    print Test
    return bool(flag)
print miller_rabin_test(2017 ,7)

CTF中RSA的常见攻击方法 http://www.2cto.com/article/201609/551390.html   加密及攻击 http://www.doc88.com/p-982460038116.html   Miller-Rabin素性测试c实现   http://www.cnblogs.com/fstang/archive/2013/01/07/2849807.html http://www.cnblogs.com/vongang/archive/2012/03/15/2398626.html 大数因数分解Pollard_rho 算法详解   http://blog.csdn.net/maxichu/article/details/45458569 http://blog.csdn.net/fisher_jiang/article/details/986654     字符串转数字

coding=UTF-8 将字符串转化为数字

python from functools import reduce import math def char2int(s): return {'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}[s] def mulit_int(x,y): return 10*x+y def str2int(s): if s.find('.')==-1:#不是浮点数 return reduce(mulit_int,map(char2int,s)) else:#是浮点数 s1=s.split('.') s2int=reduce(mulit_int,map(char2int,s1[0])) #整数部分 s2float=reduce(mulit_int,map(char2int,s1[1]))*0.1**len(s1[1]) #小数部分 return s2int+s2float print(str2int("123345.678")) ''' 上面涉及到的知识点:python中内置的map()和reduce()函数的应用。 其中map()函数要接收两个参数,第一个参数为函数,第二个参数为一个Iterable对象,map将传入的函数依次作用到序列的每个元素,结果以Iterable返回。 而reduce()函数也接收两个参数,与map一样,但是reduce函数是把结果和序列中剩下的元素一起继续参与运算   列表转字符串 ''' a = ['I', 0, 0, 0, 0, 0] for i in range(0,a.__len__()): a[i] = str(a[i]) print a str1 = "" str1 = str1.join(a) print str1     strNumber= ''.join(map(str,listNumber))   关于Miller-Rabin素性测试的误判概率 当选取2、3、5、7、11、13、17这7个数时, 所有不超过341 550 071 728 320的数判定结果都正确。 http://tieba.baidu.com/p/4009980598  

RSA python 实现:

https://kifish.visualstudio.com/pieces/_git/pieces?path=%2Fpython%2Fpython—RAS—%E7%B4%A0%E6%95%B0%E5%88%A4%E5%AE%9A%2Ffinalmodify.py

https://kifish.visualstudio.com/_git/pieces?path=%2Fpython%2Fpython—RAS—%E7%B4%A0%E6%95%B0%E5%88%A4%E5%AE%9A