CryptoHack:Diffie-Hellman(STARTER)

1.Working with Fields

这里的主要目的是算乘法逆元d

我们有RSA中算乘法逆元的基础这里就很快了,找到"e"和"phi"就是题目中的"g"和"N"

python 复制代码
# Diffie-Hellman算法
import gmpy2
p=991
N=991
g=209
d=gmpy2.invert(g, N)
print(d)
#569

2.Generators of Groups

这里算的是原根

在一个模数为p的剩余系中,如果存在一个整数g,它的幂可以生成整个剩余系,那么g就被称为p的一个原根。

简单的来说就是,如果g是原根,对于这个剩余系中的元素a(0=<a<=p-1),都可以以的形式表示出来

如何求原根?

常用的有两种方法:原根判别法和试除法。(对于一些已知的特殊模数,如素数和Carmichael数,可以直接查表得知)

素数原根表 - LzyRapx - 博客园 (cnblogs.com)

如果p的原根存在的话,那么原根一定是唯一的,其个数为 其中为欧拉函数

python 复制代码
# 原根
 from sympy.ntheory import is_primitive_root
 p = 28151
 g = 2
 while not is_primitive_root(g, p):
     g += 1
print(g)
# # 7

3.Computing Public Values

(没截数字)

算A,有公式按公式写就可(pow()也是RSA讲过的内容,不懂的可以翻一下)

python 复制代码
g=2
p=2410312426921032588552076022197566074856950548502459942654116941958108831682612228890093858261341614673227141477904012196503648957050582631942730706805009223062734745341073406696246014589361659774041027169249453200378729434170325843778659198143763193776859869524088940195577346119843545301547043747207749969763750084308926339295559968882457872412993810129130294592999947926365264059284647209730384947211681434464714438488520940127459844288859336526896320919633919
a=972107443837033796245864316200458246846904598488981605856765890478853088246897345487328491037710219222038930943365848626194109830309179393018216763327572120124760140018038673999837643377590434413866611132403979547150659053897355593394492586978400044375465657296027592948349589216415363722668361328689588996541370097559090335137676411595949335857341797148926151694299575970292809805314431447043469447485957669949989090202320234337890323293401862304986599884732815
print(pow(g,a,p))
# 1806857697840726523322586721820911358489420128129248078673933653533930681676181753849411715714173604352323556558783759252661061186320274214883104886050164368129191719707402291577330485499513522368289395359523901406138025022522412429238971591272160519144672389532393673832265070057319485399793101182682177465364396277424717543434017666343807276970864475830391776403957550678362368319776566025118492062196941451265638054400177248572271342548616103967411990437357924

4.Computing Shared Secrets

目的为了算g^{a*b} mod p

要么算要么算

题目有A和b还有p,直接用第一种就可以

python 复制代码
p=2410312426921032588552076022197566074856950548502459942654116941958108831682612228890093858261341614673227141477904012196503648957050582631942730706805009223062734745341073406696246014589361659774041027169249453200378729434170325843778659198143763193776859869524088940195577346119843545301547043747207749969763750084308926339295559968882457872412993810129130294592999947926365264059284647209730384947211681434464714438488520940127459844288859336526896320919633919
g = 2
A=70249943217595468278554541264975482909289174351516133994495821400710625291840101960595720462672604202133493023241393916394629829526272643847352371534839862030410331485087487331809285533195024369287293217083414424096866925845838641840923193480821332056735592483730921055532222505605661664236182285229504265881752580410194731633895345823963910901731715743835775619780738974844840425579683385344491015955892106904647602049559477279345982530488299847663103078045601
b= 12019233252903990344598522535774963020395770409445296724034378433497976840167805970589960962221948290951873387728102115996831454482299243226839490999713763440412177965861508773420532266484619126710566414914227560103715336696193210379850575047730388378348266180934946139100479831339835896583443691529372703954589071507717917136906770122077739814262298488662138085608736103418601750861698417340264213867753834679359191427098195887112064503104510489610448294420720
B= 518386956790041579928056815914221837599234551655144585133414727838977145777213383018096662516814302583841858901021822273505120728451788412967971809038854090670743265187138208169355155411883063541881209288967735684152473260687799664130956969450297407027926009182761627800181901721840557870828019840218548188487260441829333603432714023447029942863076979487889569452186257333512355724725941390498966546682790608125613166744820307691068563387354936732643569654017172
print(pow(A,b,p))
# 1174130740413820656533832746034841985877302086316388380165984436672307692443711310285014138545204369495478725102882673427892104539120952393788961051992901649694063179853598311473820341215879965343136351436410522850717408445802043003164658348006577408558693502220285700893404674592567626297571222027902631157072143330043118418467094237965591198440803970726604537807146703763571606861448354607502654664700390453794493176794678917352634029713320615865940720837909466
相关推荐
DB_UP16 分钟前
基于XGBoost的集成学习算法
算法·机器学习·集成学习
穆姬姗27 分钟前
【Python】论文长截图、页面分割、水印去除、整合PDF
开发语言·python·pdf
刘大猫2639 分钟前
《docker基础篇:4.Docker镜像》包括是什么、分层的镜像、UnionFS(联合文件系统)、docker镜像的加载原理、为什么docker镜像要采用这种
人工智能·算法·计算机视觉
chusheng18401 小时前
基于 Python Django 的西西家居全屋定制系统(源码+部署+文档)
开发语言·python·django·家具定制系统·python 全屋家具定制系统·python 家居定制
走在考研路上1 小时前
力扣896
python·算法·leetcode
Joyner20181 小时前
python-leetcode-整数转罗马数字
算法·leetcode·职场和发展
wshzd1 小时前
LLM之RAG实战(五十一)| 使用python和Cypher解析PDF数据,并加载到Neo4j数据库
数据库·python·pdf
兔飞飞呀2 小时前
常见转义字符
开发语言·前端·python
爱学习的uu2 小时前
KAGGLE竞赛实战2-捷信金融违约预测竞赛-part1-数据探索及baseline建立
人工智能·python·决策树·机器学习·金融·数据挖掘·逻辑回归
金创想2 小时前
衡量算法效率的方法:时间复杂度、空间复杂度
算法·时间复杂度·空间复杂度·大o函数