加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

比特币secp256k1,ecc椭圆曲线加密方法采用BSGS算法破解。用python语言编写。

(2017-11-08 18:53:06)
标签:

secp256k1

python

xwc

白币

bsgs

分类: 比特币
比特币secp256k1,ecc椭圆曲线加密方法采用BSGS算法破解。用python语言编写。
这里是白币私钥:
WsBLkkXYyjXo4JsJULLQGS76py36yAJVhkNuBLu7Jy1622KNgrVW
免费赠送,先到先得。
1.相关环境
本人测试环境:win10 64位
开发环境:VS2015 
python版本:3.5.2

2.代码示例:
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

#!/usr/bin/python
#coding=gbk
import math
def GetSqrtRange(num):#求开方
    a = 1
    b = num - 1
    if(num==0):
        return (0,0)
    if(num==1):
        return (1,1)
    if(num==2 or num==3):
        return (1,2)
    if(num==4):
        return (2,2)
    if(num==5 or num==6 or num==7 or num==8):
        return (2,3)
    while(1):
        c = (a + b) // 2
        if(c ** 2 > num):
            b = c
            if(a ** 2 == num):
                return (a,a)
            if(a + 1 == b):
                return (a,b)
        elif (c ** 2 < num):
            a = c
            if(b ** 2 == num):
                return(b,b)
            if(a + 1 == b):
                return(a,b)
        else:
            return (c,c)
def quick_algorithm(a,b,c):  #求乘法逆元
    a = a % c  
    ans = 1  
    #这里我们不需要考虑b<0,因为分数没有取模运算
    while b != 0:  #费马小定理
        if b & 1:  
            ans = (ans * a) % c  
        b>>=1  
        a = (a * a) % c  
    return ans  
def BSGS(A,B,C): 
    m=GetSqrtRange(C)[1]
    v=quick_algorithm(A,C-1-m,C)
    hash={}
    hash[1]=m
    e=1
    for i in range(1,m): 
        e=(e*A)%C
        if(hash.get(e)==None):
            hash[e]=i
    for i in range(0,m): 
        if(hash.get(B)!=None):
            ret=hash[B]
            hash.clear()
            if(ret==m):
                return i*m
            else:
                return i*m+ret
        B=(B*v)%C
    return -1
if __name__ == "__main__":
    if True:
        A=100
        P=977
        k=quick_algorithm(A,P-2,P)
        print("取余k = "+("%d" % k))
        y=BSGS(A,k,P)
        print("y = "+("%d" % y))
        print("验证k =",quick_algorithm(A,y,P))
    input()

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
3.测试效果:

取余k = 850
y = 487
验证k = 850


如果觉得有用,就打赏点虚拟币给我,谢谢。
白币(XWC)打赏地址:WYkBw4qveiFGgkCJbKmz55SAK79qJwGrQv
比特币(BTC)打赏地址:1KckCJAiMnwbQLSSSWY7uJBfcgvrMsMJiZ
无限币(IFC)打赏地址:i66xPVPgZXWuAPPMbqh4q1fhJABUFwHi9q
狗狗币(DOGE)打赏地址:DJBF5UwQwuPJj72XsQi62cwDooyPLY1i2e


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有