回答:
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に上げました。16スレーブから6にFAAS構成を微調整する必要がありました(+3 mpi、1マスター)。20mポリセレクト、12h 50mふるい、2h 25m linalg、30m sqrt。合計コスト〜$ 70。少なくとも@orlpは解けるサイズを選択するのに十分でしたが、私はこれを二度とやっていません!最後のステップを@IlmariKaronenに感謝し、はいについて冗談を言っています推測:P)
元の:
#((()))****+,,---/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
。
(p*q-2*(p+q))/4
しかし、どのように部品をリバースエンジニアリングしましたか?:)
p
とq
(本物、コード内の1があるp-1
とq-1
その目的をゴルフ用)など(p-1)/2
、私たちが持っているプライムそうですφ(φ(pq)) = ((p-1)/2-1)((q-1)/2-1)
。これにより、オイラーのアイデンティティを使用して65537
mod のモジュラー逆数φ(pq)
(RSAに必要なもの)を計算でき、モジュラー逆論理を実装したり別の大きな定数をハードコーディングしたりする必要がないため、答えがはるかに短くなります。-~q*-~p
-> とは別に~q*~p
、あなたはまさに私の機能を見つけました:)
φ(φ(pq)) = 2((p-1)/2-1)((q-1)/2-1)
安全素数のためにp
とq
、理由はφ(4) = 2
。ただしλ(φ(pq)) = lcm(2, (p-1)/2-1, (q-1)/2-1)
、最大((p-1)/2-1)((q-1)/2-1)/2
であり、その倍数から1を引いた値が指数になります。:)
from bisect import*
q=int(input())
print(bisect([(h+1)**2 for h in range(q)],q))
これはクラックするのが本当に大変でした!Python 3ディストリビューションに含まれているbisectライブラリを使用します。このbisect
関数は、ソートされたリストと要素を受け取り、順序を維持するために要素を挿入できる右端のインデックスを返します。q
から始まる正方形の長さリスト1
と要素を与えるだけq
です。
(h+1)
することをお勧めし-~h
ます。P:そして、私はこの挑戦のポイントではないことに気づいた
**
よりも優先順位が高いとは思いませんでした~
。これは-~2**2
、構文エラーをスローするJS (「括弧なしの単項式は '**'の左側に表示できない」)よりも優れていると思います。
**
ES2017で追加作業を、)
元の:
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スタイルのコンマ式だけでなく、余分な未使用の関数パラメーターも許可されているようです。
元の:
x=>eval(atob`eCp4KzEvLyAgfXBModLS4TvEn4wp1iys9YRRKC85KLIhNMC=`)
クラック:
x=>eval(atob`CgpNYXRoLnBvdyh4LTEsMC41KSAvLw4589CEIKKMRefipyz=`)
上記のbase64コードは次のようにデコードします。
Math.pow(x-1,0.5) //...
どこ ...
、コメント内にあるためJSインタープリターによって無視されるランダムなガベージの束を表します。
この解決策は試行錯誤で見つけました。最後に、本当に難しいのは、コードの先頭にある2つの改行であり、残りの行を適切に配置M
しMath
、base64エンコードを元の文字セットで利用可能なものにするために必要でした。最初にスペースを試しましたが、" M"
base64-encodesにエンコードし"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)))
((((()()())){}[()]){}{}{})
([(((()())()){}){}{}](){})
[:[+:]-:
。
lambda x:sorted(a**2for a in range(x)).index(x)
オリジナル(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"
。
expm1
、そして「待って、それは問題だ」と言いました。
5#.[:,(3 5&#:(-$]-)7)#.inv"0]
[:(](07-5)"3 #.-:&#$,)5#.inv]
Another crack equivalent is
[:((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