隐藏的倒置(Robbers的线程)


Answers:


21

Python 3,46个字节,Lynn

lambda x0223334566789:(x0223334566789*89)//178

如何“通知原始答复者”?
GB

留下了评论,将您的答案链接到原始文件
-Sefa

你应该放下f=你的代码的开头,因为它并不需要,而不是原来的部分功能
0'

完成后,我只是将其粘贴粘贴得太快了。
GB

16
在这里,我实际上是在强迫解决一个问题(甚至假设存在),而您只是回避了整个问题!+1
Orlp

14

Python 2,225字节,orlp

p=90930641353124136621573325641513715557077985927835294018496194596645372722158;q=101979812089012306249375934082966806799688507587087308196267706260111970225882#--223444799
lambda n:pow(n,pow(65537,(p*q-2*(p+q))/4,p*q),~p*~q)

猜猜我整天都随机数除数后很幸运 ...

(默认的c4.8xlarge斑点限制为4,但去年我设法将其提高到10。虽然不得不将FAAS配置从16个从属调整为6个(+3 mpi,1个主控)。20m polyselect,12h 50m筛分,2h 2500万linalg,3000万平方英尺,总成本〜$ 70。至少@orlp足以选择一个可解决的尺寸,但是我不再这样做了!感谢@IlmariKaronen的最后一步,是的,我在开玩笑猜:P)


我..什么......现在,我心疼你花费金钱:(我特意挑选的大小仍然是相当小的,但过高的成本,攻击我实际上并没有认为任何人会花钱买这个。
orlp

1
@orlp作为我的一次性经历,这完全值得。我希望人们从中从野外学到一些有关512位RSA安全的知识:)
Sp3000

这是对高尔夫的真正奉献,不仅花费时间,还花费金钱!有趣的是,攻击者可能会通过云计算服务试用来免费破解512位RSA。
英里

@miles我应该提到,如果有人想尝试,AWS可以为学生提供学分,如果其他服务也能做到这一点,我不会感到惊讶。因此,至少在第一次,您可能与这个试验想法相距不远。(如果有人想尝试-确保完成后删除所有卷,AMI等,否则将收取存储费用)
Sp3000,17年

11

Python 2,83个字节,orlp

原版的:

#((()))****+,,---/2289;==oppppppqqqqqw~~
lambda n:pow(n,65537,10998167423251438693)

裂纹:

p=3207399658;q=3428998126#--11
lambda n:pow(n,pow(65537,(p*q-2*(p+q))/4,p*q),~p*~q)

在线尝试!

Wolfram Alpha完成了RSA破解。;)


我刚刚意识到~p*~q比短-~p*-~q,哎呀。
orlp

您是如何对(p*q-2*(p+q))/4零件进行逆向工程的?:)
orlp

那是最棘手的部分,不是吗?基本上,我们了解Carmichael函数以及p/2and q/2都是奇质数的事实,并经过一堆反复试验,以找到可以使用可用字符的东西。
Ilmari Karonen

我有意选择pq(以假乱真,一个代码是p-1q-1打高尔夫球的目的),这样(p-1)/2是素数,使我们有φ(φ(pq)) = ((p-1)/2-1)((q-1)/2-1)。这使我们能够使用Euler的身份来计算65537mod 的模逆φ(pq)(对于RSA需要什么),使答案短很多,因为我们不需要实现模逆逻辑或对另一个大常数进行硬编码。除了-~q*-~p->外~q*~p,您确切地找到了我的功能:)
orlp

1
其实,挑一个小挑剔,相信φ(φ(pq)) = 2((p-1)/2-1)((q-1)/2-1)对于安全素数pq的,因为φ(4) = 2。但是λ(φ(pq)) = lcm(2, (p-1)/2-1, (q-1)/2-1)最多为((p-1)/2-1)((q-1)/2-1)/2,并且其中的任何倍数减一都会对指数起作用。:)
Ilmari Karonen

7

Python 3,80个字节,Wolfram

from bisect import*
q=int(input())
print(bisect([(h+1)**2 for h in range(q)],q))

这真的很难破解!我使用bisect库,该包含在Python 3发行版中。该bisect函数接受一个已排序的列表和一个元素,并返回可以插入该元素以保持顺序的最右边的索引。我们只需给它的长度- q从开始平方列表1和元素q


1
我打算建议更改(h+1)-~h。然后我意识到这不是挑战的重点:P
ETHproductions'Jan

@ETHproductions由于运算符的优先级,这还是不正确的。
Sp3000

@ Sp3000呵呵,我不知道它的**优先级高于~Python。我想这比在JS中-~2**2抛出语法错误(“无括号的一元表达式不能出现在'**'的左侧”)更好。
ETHproductions

@ETHproductions他们这样做实际上是为了避免产生歧义,正如我可能会补充说的那样,这对大多数JS设计而言都是非常不典型的。
硕果累累

@ Challenger5实际上,我在那里必须与您不同意:近年来TC39一直非常谨慎,以确保所添加的任何新功能都尽可能地避免歧义(包括**在ES2017中添加的运算符)
ETHproductions

6

Javascript,21个字节,Arnauld

原版的

b=>Math.pow(b,torc=3)

裂纹

o=>Math.cbrt(o,pbw=3)

返回多维数据集的根。


你去!;)
Arnauld

@Arnauld:我发现JS允许您使用比其定义的参数更多的函数来调用函数,这有点奇怪。我不知道背后的想法是什么。
Emigna

6
没错,JS允许这样做。但是,多余的参数并没有完全丢失,因为它们存储在arguments对象中,该对象可以由函数手动访问。
Arnauld

5

7,9字节,ais523

00000000: 0173 dc25 7e13 dcb6 1f                   .s.%~....

因为蛮力总是赢,所以9!只有362880


4

Processing.js,59字节,Kritixi Lithos

原版的:

float igetuwebaoli(int p){return p*(((17*-4*-3)))+0+0;}//,,

裂纹:

int loabewuteg(float p,i){return (i+0**+0,(p/17/(-4*-3)));}

好吧,这很容易。最困难的部分是弄清楚在哪里粘贴多余的逗号和星号。幸运的是,Processing似乎允许额外的未使用函数参数以及C样式的逗号表达式。


1
显然,我所链接的口译员是错误的。实际上,由于Processing-java已预先编译到Processing.js,所以大多数(甚至所有)在线解释器可能都会出错。现在,我认为最好的做法是对我来说,您应该将我们的答案更改为“ Processing.js”,而不是Processing,因为这样您的答案将是有效的(Processing-java提供了很多错误)。我将使用与Processing-java相同的代码发布一个单独的答案,但是为此,嵌套解释器将是从processing.org安装它。反正做得好!
Kritixi Lithos

4

JavaScript(ES6),63个字节,SLuck49

原版的:

x=>eval(atob`eCp4KzEvLyAgfXBModLS4TvEn4wp1iys9YRRKC85KLIhNMC=`)

裂纹:

x=>eval(atob`CgpNYXRoLnBvdyh4LTEsMC41KSAvLw4589CEIKKMRefipyz=`)

上面的base64代码解码为:



Math.pow(x-1,0.5) //...

在哪里 ...代表一堆随机垃圾,JS解释器会忽略它们,因为它在注释中。

我通过反复试验找到了该解决方案。最终,唯一真正棘手的部分是两个新行的代码的开始,使其余的线路正确,并得到所需要MMath为Base64编码到的东西,在原来的字符集是可用的。我首先尝试了空格,但是将" M"base64编码到其中,"ICBN"并且我需要唯一可B用于".po"稍后在代码中进行编码的代码。 "0+M""1*M""1?M"或其他任何类似的无操作前缀我能想到的,没有任何工作,但换行一样。

我怀疑这可能不是确切的解决方案,但是无论如何,它都能起作用。:)

演示:

var f = x=>eval(atob`eCp4KzEvLyAgfXBModLS4TvEn4wp1iys9YRRKC85KLIhNMC=`)
var g = x=>eval(atob`CgpNYXRoLnBvdyh4LTEsMC41KSAvLw4589CEIKKMRefipyz=`)
for (var i = -0; i <= 10; i++) console.log(i, '->', f(i), '->', g(f(i)))


找到一份
可行的

令人印象深刻:)我采取了完全相同的方法,但没有想到尝试换行。我试图在其他地方丢失C,但是却一无所获。
克里斯M

3

Brain-Flak,26个字节,Wheat Wizard

原创(新增13)

((((()()())){}[()]){}{}{})

裂纹(减去13)

([(((()())()){}){}{}](){})




3

JavaScript(ES6),46字节,SLuck49

原始(计算ln(x + 1))

x=>Math.log(x+(+String(t=985921996597669)[5]))

裂纹

x=>Math[(lg=19979699+55686).toString(9+25)](x)

如果我没有意识到逆是Math内置的,那么我永远也不会破解。(lg=19979699+55686).toString(9+25)只是一种复杂的返回方式"expm1"


做得很好!是的,我正在浏览Math上的函数来决定使用什么,看到expm1并说:“等等,这是事情吗?”
SLuck49

2

J,10字节,英里

1%:@*~>:[<

我必须在这里写点东西,因为答案太短了。


2

J,29个字节,Zgarb

原版的

5#.[:,(3 5&#:(-$]-)7)#.inv"0]

裂纹

[:(](07-5)"3 #.-:&#$,)5#.inv]

在线尝试!

另一个等效的裂纹是

[:((3 ]7-5)#.-:&#$,)5#.inv"0]

说明

[:(](07-5)"3 #.-:&#$,)5#.inv]  Input: integer n
                            ]  Get n
                      5        The constant 5
                       #.inv   Get the digits of n in base 5
[:(                  )         Operate on those digits D
                    ,            Flatten D (does nothing since it is already a list)
                  #              Get the length of D
               -:&               Halve it
                   $             Reshape D to half its length (only the base 2 digits)
    (07-5)"3                     The constant 2 with rank 3
             #.                  Convert the front-half of D to a decimal from base 2
   ]                             Return the right result

是的,行得通!这与我的解决方案有点不同,但是还有很多余地。基本逻辑是一样的。
Zgarb
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.