离散对数的求解

1.暴力

2.Baby-step giant-step

3.Pollard’s ρ algorithm

……

下面搬运一下Baby-step giant-step 的做法

这是在 https://ctf-wiki.github.io/ctf-wiki/crypto/asymmetric/discrete-log/discrete-log/ 上看到的,比较容易理解。

而且,里面的代码写得简洁明了。

写一下自己理解和自己照着写了一遍

原文代码:

def bsgs(g, y, p):m = int(ceil(sqrt(p - 1)))S = {pow(g, j, p): j for j in range(m)}   #在字典S中存放了g^j和对应的jgs = pow(g, p - 1 - m, p)                 #求解的是baby step中的值,也就是g^(-m),其实就是g^m mod p的逆元,也就可以使用egcd来求解for i in range(m):if y in S:return i * m + S[y]               #S[y]取出的是此时y对应的iy = y * gs % p                        #如果baby step的值和 giant step的值不相等,继续执行baby stepreturn None

View Code

照着写一遍的代码

#求解离散对数问题import math
def egcd(a,b):r0,r1,s0,s1=1,0,0,1n=bwhile(b):q,a,b=a//b,b,a%br0,r1=r1,r0-q*r1s0,s1=s1,s0-q*s1return r0%n             #拓展欧几里得返回的三个值是,a是a和b的最大公因数,r0和s0分别是ax+by=c中的一组解x和y,【此时只是选择返回一个r0,因为得到的是ax+by=gcd(a,b)中的x即可,有的时候x或者y可能为负数,在求解正数的逆元的时候负数要对n再次求模运算#求解离散对数就是,X=G^a mod P,其中给出X,G,P的值,要求解的是 a的值,此处采用的是Baby step giant step的方法def bsgs(x,g,p):                  #求解x=g^a mod p中的a,其中g是生成元m=math.ceil(math.sqrt(p-1))   #m的值是 p-1开平方后向上取整bstep={pow(g,j,p):j for j in range(m)}              #每一次 j 的增加表示 “baby-step”,一次乘上g,字典S中存了所有的g^j(j<m)以及其对应的jgstep=egcd(pow(g,m),p)           #算出了gstep的值,也就是g^-m的值for i in range(m):if x in bstep:return i*m+bstep[x]x=x*gstep%pprint(bsgs(37,3,101))

View Code

继续学习其他的做法

参考资料:http://zoo.cs.yale.edu/classes/cs257/ppt/all/Mac/19_DiscreteLog.ppt

转载于:https://www.cnblogs.com/Guhongying/p/9966875.html

Discrete Log Algorithms :Baby-step giant-step相关推荐

  1. NOI数学:大步小步(Baby Step Giant Step,BSGS)算法

    BSGS算法求 高次同余方程:1.可爱的质数 2.计算器 BSGS算法求 高次同余方程:1.可爱的质数 2.计算器_啦啦啦32421的博客-CSDN博客 大步小步算法(BSGS)及扩展 & b ...

  2. 【数学】Baby Step,Giant Step

    给定整数 a,b,pa,b,pa,b,p 且 a,pa,pa,p 互质,请求出高次同余方程 ax≡b(modp)a^x\equiv b\pmod pax≡b(modp) 的非负整数解. 首先, a0≡ ...

  3. 离散对数(Baby Step Giant Step)

    现在我来介绍一种算法叫做Baby Step Giant Step.它是用来解决如下方程最小正整数解的     其中 如果,那么我们可以先取模,即,所以在这里我们只讨论的情况. 普通Baby Step ...

  4. BZOJ 2242([SDOI2011]计算器-Baby Step Giant Step第1题)

    2242: [SDOI2011]计算器 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 744  Solved: 289 [Submit][Statu ...

  5. Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇

    Enterprise Library Step By Step系列(十一):异常处理应用程序块--入门篇 作者:Terrylee 一.概述 使开发人员和决策人员能够针对发生在企业应用程序体系结构层的异 ...

  6. Vivado出现编译错误:[USF-XSim 62] 'compile' step failed with error(s) while executing...

    在vivado执行仿真过程中出现了如下错误: [USF-XSim 62] 'compile' step failed with error(s) while executing 'D:/vivado_ ...

  7. 介绍Stonebraker和DeWitt教授的文章:MapReduce: A major step backwards

    以下引用的两篇文章作者为:David J. DeWitt and Michael Stonebraker MapReduce: A major step backwards,说明了MapReduce虽 ...

  8. ActionScript 3.0 Step By Step系列(五):走在面向对象开发的路上,以类为基础去思考编程问题...

    面向对象的程序设计(Object-Oriented Programming,简记为OOP)是一种功能非常强大的编程方法,立意于创建软件重用代码,以类为基础去思考编程问题. ActionScript 3 ...

  9. NHibernate Step by Step:序篇 (转)

    原文出处:http://www.cnblogs.com/abluedog/archive/2006/04/15/375676.html 原文作者:abluedog 很久以前,你可能习惯了connect ...

最新文章

  1. HDU-4403 A very hard Aoshu problem 枚举
  2. 3.获得单应矩阵(每张图片需要m个棋盘格角点,m≥4)
  3. Makefile: -I(大写i)、-L、-l
  4. goroutine并发扫描MySQL表_goroutine 并发之搜索文件内容
  5. airpodspro窃听模式_AirPods Pro实时收听怎么关闭? AirPods Pro实时收听的使用方法
  6. Linux项目第一次访问非常慢,后来很快的异常
  7. python中summary_python summary 1: class
  8. vsftpd增加用户 linux,linux下开通vsftpd 添加新ftp用户
  9. 微信小程序服务器api接口的路径,微信小程序-封装请求基准路径、接口API 和使用...
  10. JAVA 基础 /第六课: 面向对象 / JAVA中的类和对象
  11. Golang web请求
  12. vmware 删除后安装不了,‍vmware workstation.msi failed
  13. 【渝粤题库】广东开放大学 JavaScript 形成性考核
  14. app内录屏开发 ios_iOS 一行代码实现手机录屏功能
  15. 戴尔微型计算机重装WIN10系统,戴尔品牌机如何重装win10系统
  16. 经典例题:判断给定数组是否已经排好序
  17. 2023年起,社保断缴1次,这些资格待遇通通取消,一定要注意!
  18. 长沙举办智慧城市供应链沙龙
  19. python 10行代码生成词云图片(基础词云、形状词云)
  20. 智能型手机中的音频设计方案

热门文章

  1. Git本地仓库管理远程库(GitHub)——clone(下载)、push(提交)、pull(拉取)操作
  2. php数组添加省会城市,【JSON数据】中国各省份省会城市经纬度 JSON
  3. 2013电大计算机应用基础试题及答案,[2017年电大]电大2013年计算机应用基础试题及答案[呕心沥血整理].doc...
  4. 普通类和抽象类有哪些区别?
  5. cesium米转换经纬度_cesium 常见坐标系及坐标转换(工具篇)
  6. 网络技巧:无线路由器越用越慢的解决方法
  7. 今日腊八节,祝福送上!
  8. 安卓App的启动过程、安卓布局分类及布局和页面的关系
  9. 【Java】接口(interface)VS抽象类
  10. 一个小技巧 禁止浏览器弹出Alert