用于公共CTF加密函数的小型Python模块。

crypto-commons的Python项目详细描述


加密共享

用于公共CTF加密函数的小型Python模块。 如果您认为缺少了什么,或者您有一些有趣的代码要共享,请随意贡献。

一般来说,我们希望尽可能地保持这种依赖关系的自由,所以很可能具有大量外部依赖关系的拉取请求不会被合并。

请注意:这不是一个通用的加密库,也不是生产级的加密实现! 您不应该在实际应用程序中使用这些代码。

我们要解决的问题:

  • 需要不断地寻找一些不太常见的算法(如damgard jurik)或不太常见的场景(如具有素数幂的rsa)的实现。
  • 需要安装许多不同的库才能使用一些简单的函数。
  • 在不同环境上安装依赖项时出现问题。 尤其是与python 2/3不兼容和编译的c模块。
  • 一遍又一遍地重复相同的代码,把时间浪费在调试错误和小错误上。

我们希望遵循的一般准则:

  • 将实现分成几个小步骤。CTF任务通常需要更改某些算法, 因此,能够从更小的块组装一个算法是很好的。
  • 公开清晰的接口。 面向对象的代码对于生产级软件来说可能很好, 但是当你试图将你拥有的原语转换成库所需的对象时,它会变得更加复杂。 尤其是当您缺少一些参数时,这些参数对于您需要的函数是不必要的。
  • 除了当前函数所必需的断言和检查之外,不要进行其他断言和检查。 有些库在CTF环境中不可用,因为它们会自动检测不到一些“无效”参数, 但实际上我们知道参数是错误的,我们需要更多的步骤来解决这个任务。

安装

sudo python setup.py install

用法示例

基本用法:

fromcrypto_commonsimportgeneric#xor a hex array with a string and print the resulta=[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))

qiwi CTF, crypto 400

fromcrypto_commons.genericimportlong_to_bytesfromcrypto_commons.rsa.rsa_commonsimporthastad_broadcastdefmain():n1=95118357989037539883272168746004652872958890562445814301889866663072352421703264985997800660075311645555799745426868343365321502734736006248007902409628540578635925559742217480797487130202747020211452620743021097565113059392504472785227154824117231077844444672393221838192941390309312484066647007469668558141n2=98364165919251246243846667323542318022804234833677924161175733253689581393607346667895298253718184273532268982060905629399628154981918712070241451494491161470827737146176316011843738943427121602324208773653180782732999422869439588198318422451697920640563880777385577064913983202033744281727004289781821019463n3=68827940939353189613090392226898155021742772897822438483545021944215812146809318686510375724064888705296373853398955093076663323001380047857809774866390083434272781362447147441422207967577323769812896038816586757242130224524828935043187315579523412439309138816335569845470021720847405857361000537204746060031c1=64830446708169012766414587327568812421130434817526089146190136796461298592071238930384707543318390292451118980302805512151790248989622269362958718228298427212630272525186478627299999847489018400624400671876697708952447638990802345587381905407236935494271436960764899006430941507608152322588169896193268212007c2=96907490717344346588432491603722312694208660334282964234487687654593984714144825656198180777872327279250667961465169799267405734431675111035362089729249995027326863099262522421206459400405230377631141132882997336829218810171728925087535674907455584557956801831447125486753515868079342148815961792481779375529c3=43683874913011746530056103145445250281307732634045437486524605104639785469050499171640521477036470750903341523336599602288176611160637522568868391237689241446392699321910723235061180826945464649780373301028139049288881578234840739545000338202917678008269794179100732341269448362920924719338148857398181962112print(long_to_bytes(hastad_broadcast([(c1,n1),(c2,n2),(c3,n3)])))main()

qiwi CTF again, crypto 400

importgmpy2fromcrypto_commons.genericimportlong_to_bytesfromcrypto_commons.rsa.rsa_commonsimporthensel_lifting,modinvdefmain():n=158168890645747636339512652656727367370140893295030333823920833363025940906055891357316994482461476576118114207681214323912652527927215053128809927932495206979837034713724140745400652922252749994983891690894724877897453440237829719520264826887839607084620792280551479756249230842706713662875715392719130358089e=65537c=140823625180859595137593494178968497314300266616869468408596741823165198698204065579249727536890649445240801729293482339393915146972721826733382396566284303449925618355682242041225432010603850355326962069585919704623290128021782032477132287121179121257196031074006842188551083381364957799238533440938240326919p=gmpy2.isqrt(n)k=2base=pow(c,modinv(e,p-1),p)# solution to pt^e mod pf=lambdax:pow(x,e,n)-cdf=lambdax:e*xr=hensel_lifting(f,df,p,k,base)# lift pt^e mod p to pt^e mod p^kforsolutioninr:print(long_to_bytes(solution))main()

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何使用MVC设计模式观察嵌套对象   java将多个客户端连接到服务器   合并Java Web应用程序   Spring Security中未捕获java AuthenticationSuccessEvent   java Firebase JSON到Arraylist内部的Arraylist,存在对象问题   在Java15的sealedclasses特性中,final类和非密封类之间有什么区别?   java我可以使用数组。copyOf制作二维数组的防御副本?   java球不会在屏幕上移动   Java类如何在同一个文件中包含两个类?   java使用“Character.isWhiteSpace”删除所有空白   java阻止在RealmList中保存时创建领域对象   如何仅在ConnectionFactory上使用Java JMS身份验证   spring可以强制java对象在运行时实现接口吗?   socket无法在JAVA中使用TCP启用双工模式通信