一个小型的Python模块,用于常见的CTF加密函数。
项目描述
crypto-commons
一个小型的Python模块,用于常见的CTF加密函数。如果您认为缺少某些功能,或者您有一些有趣的代码要分享,请随时贡献。
通常我们希望尽可能减少依赖,因此很可能包含大量外部依赖的拉取请求将不会合并。
记录在案:这不是一个通用目的的加密库,也不是生产级别的加密实现!您不应在实际应用中使用此代码中的任何部分。
我们想要解决的问题
- 需要不断寻找某些不太常见算法(如Damgard-Jurik)或不太常见场景(如RSA与素数幂)的实现。
- 为了使用一些简单的函数,需要安装许多不同的库。
- 在不同环境中安装依赖项的问题。特别是Python 2/3不兼容性和编译的C模块。
- 反复编写相同的代码,并在调试错别字和小的错误上浪费时间。
我们希望遵循的一般准则
- 将实现拆分为小步骤。CTF任务通常需要更改某些算法,因此能够从较小的块中组装算法将很棒。
- 提供清晰的接口。面向对象代码可能适合生产级软件,但在尝试将您的原语转换为库所需的对象时会使事情更复杂。特别是当您缺少某些参数时,这些参数对于您需要的函数不是必需的。
- 不要进行除当前函数必需之外的其他断言和检查。一些库在CTF环境中不可用,因为它们会自动检测到一些“无效”的参数而失败,而实际上我们知道参数是错误的,我们需要额外的步骤来解决任务。
安装
sudo python setup.py install
使用示例
基本使用
from crypto_commons import generic
#xor a hex array with a string and print the result
a = [0x61, 0x53, 0x40, 0x47, 0x42, 0x59, 0x45, 0x5c, 0x08]
b = "123456789"
b = map(ord, b)
xored = map(chr, generic.xor(a, b))
print(''.join(xored))
from crypto_commons.generic import long_to_bytes
from crypto_commons.rsa.rsa_commons import hastad_broadcast
def main():
n1 = 95118357989037539883272168746004652872958890562445814301889866663072352421703264985997800660075311645555799745426868343365321502734736006248007902409628540578635925559742217480797487130202747020211452620743021097565113059392504472785227154824117231077844444672393221838192941390309312484066647007469668558141
n2 = 98364165919251246243846667323542318022804234833677924161175733253689581393607346667895298253718184273532268982060905629399628154981918712070241451494491161470827737146176316011843738943427121602324208773653180782732999422869439588198318422451697920640563880777385577064913983202033744281727004289781821019463
n3 = 68827940939353189613090392226898155021742772897822438483545021944215812146809318686510375724064888705296373853398955093076663323001380047857809774866390083434272781362447147441422207967577323769812896038816586757242130224524828935043187315579523412439309138816335569845470021720847405857361000537204746060031
c1 = 64830446708169012766414587327568812421130434817526089146190136796461298592071238930384707543318390292451118980302805512151790248989622269362958718228298427212630272525186478627299999847489018400624400671876697708952447638990802345587381905407236935494271436960764899006430941507608152322588169896193268212007
c2 = 96907490717344346588432491603722312694208660334282964234487687654593984714144825656198180777872327279250667961465169799267405734431675111035362089729249995027326863099262522421206459400405230377631141132882997336829218810171728925087535674907455584557956801831447125486753515868079342148815961792481779375529
c3 = 43683874913011746530056103145445250281307732634045437486524605104639785469050499171640521477036470750903341523336599602288176611160637522568868391237689241446392699321910723235061180826945464649780373301028139049288881578234840739545000338202917678008269794179100732341269448362920924719338148857398181962112
print(long_to_bytes(hastad_broadcast([(c1, n1), (c2, n2), (c3, n3)])))
main()
import gmpy2
from crypto_commons.generic import long_to_bytes
from crypto_commons.rsa.rsa_commons import hensel_lifting, modinv
def main():
n = 158168890645747636339512652656727367370140893295030333823920833363025940906055891357316994482461476576118114207681214323912652527927215053128809927932495206979837034713724140745400652922252749994983891690894724877897453440237829719520264826887839607084620792280551479756249230842706713662875715392719130358089
e = 65537
c = 140823625180859595137593494178968497314300266616869468408596741823165198698204065579249727536890649445240801729293482339393915146972721826733382396566284303449925618355682242041225432010603850355326962069585919704623290128021782032477132287121179121257196031074006842188551083381364957799238533440938240326919
p = gmpy2.isqrt(n)
k = 2
base = pow(c, modinv(e, p - 1), p) # solution to pt^e mod p
f = lambda x: pow(x, e, n) - c
df = lambda x: e * x
r = hensel_lifting(f, df, p, k, base) # lift pt^e mod p to pt^e mod p^k
for solution in r:
print(long_to_bytes(solution))
main()
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。
源代码分布
crypto-commons-0.0.4.tar.gz (17.9 kB 查看哈希值)
构建版本
crypto_commons-0.0.4-py2-none-any.whl (21.4 kB 查看哈希值)
关闭
crypto-commons-0.0.4.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b1edb8f81b291fed86ce051d3abce82e8569fcb7884f9bfcf70fd65ac114e432 |
|
MD5 | 72c3e673771f9734fe42cac172dc3d8f |
|
BLAKE2b-256 | 37b2bd39fb31cdbd8088142698cd46170a6d25976313ee9688bf7f598dcbecb6 |
关闭
crypto_commons-0.0.4-py2-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 113713ce5dddb00885df1b4c3cab8545696b511bb80286050a02a62a6e2b9c28 |
|
MD5 | 43be6be3e65fab57bf510e3c53db9aed |
|
BLAKE2b-256 | 5a8697388a9a17689e2001a72e67c85b701e67efd1fd42b05e717db4719806b3 |