Ẩn nghịch đảo (Chủ đề của kẻ cướp)


16

Đây là một câu đố , chủ đề của cảnh sát có thể được tìm thấy ở đây.

Nhiệm vụ của bạn sẽ là tìm một đảo chữ cái của các chương trình được cung cấp trong luồng của cảnh sát thực hiện nghịch đảo trái của nó.

Khi bạn bẻ khóa một câu trả lời, hãy gửi giải pháp dưới dạng câu trả lời dưới đây và thông báo cho người trả lời ban đầu.

Bạn sẽ được tính điểm về số lượng chương trình bạn là người đầu tiên bẻ khóa.

Câu trả lời:


21

Python 3, 46 byte, Lynn

lambda x0223334566789:(x0223334566789*89)//178

Làm thế nào để tôi "thông báo cho người trả lời ban đầu"?
GB

Để lại một bình luận liên kết câu trả lời của bạn trên bản gốc
Sefa

Bạn nên bỏ f=mã khi bắt đầu mã vì không cần thiết và không phải là một phần của chức năng ban đầu
0 '

Xong, tôi chỉ sao chép nó quá nhanh.
GB

16
Ở đây tôi thực sự vũ phu buộc một giải pháp (và thậm chí giả sử có một giải pháp tồn tại) và bạn chỉ cần vượt qua toàn bộ vấn đề! +1
orlp

14

Python 2, 225 byte, orlp

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

Đoán tôi đã gặp may sau khi đoán được ước số nguyên tố ngẫu nhiên cả ngày ...

(Giới hạn điểm c4.8xlund mặc định là 4, nhưng tôi đã cố gắng tăng nó lên 10 vào năm ngoái. Phải điều chỉnh cấu hình FAAS từ 16 nô lệ thành 6 mặc dù (+3 mpi, 1 master). 20m polyselect, 12h 50m sàng, 2h 25m linalg, 30m sqrt. Tổng chi phí ~ 70 đô la. Ít nhất @orlp là đủ tốt để chọn kích thước có thể giải quyết được, nhưng tôi không làm điều này một lần nữa! Cảm ơn @IlmariKaronen cho bước cuối cùng, và vâng tôi đang nói đùa về đoán: P)


Tôi .. những gì ... Bây giờ tôi cảm thấy tồi tệ vì đã làm bạn mất tiền :( Tôi cố tình chọn một kích thước vẫn còn khá nhỏ nhưng chi phí quá cao để tấn công. Tôi thực sự không nghĩ ai sẽ chi tiền cho việc này.
orlp

1
@orlp Hoàn toàn xứng đáng là trải nghiệm một lần đối với tôi. Tôi hy vọng mọi người tìm hiểu điều gì đó về bảo mật RSA 512 bit trong trường hợp này :)
Sp3000

Đây là sự cống hiến thực sự cho việc chơi golf, dành không chỉ thời gian mà cả tiền bạc! Thật thú vị khi lưu ý rằng kẻ tấn công có khả năng phá vỡ RSA 512 bit miễn phí thông qua các thử nghiệm dịch vụ điện toán đám mây.
dặm

@miles Tôi nên đề cập rằng AWS có tín dụng cho sinh viên nếu có ai muốn thử và tôi sẽ không ngạc nhiên nếu các dịch vụ khác làm như vậy. Do đó, có lẽ bạn không còn xa với ý tưởng thử nghiệm đó, ít nhất là lần đầu tiên. (Nếu ai muốn thử mặc dù - Hãy chắc chắn rằng bạn xóa tất cả các khối, AMIs vv khi bạn đã hoàn tất vì nếu không bạn sẽ bị tính phí cho lưu trữ)
Sp3000

11

Python 2, 83 byte, orlp

Nguyên:

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

Crack:

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

Hãy thử trực tuyến!

Bẻ khóa RSA được thực hiện bởi Wolfram Alpha . ;)


Tôi chỉ nhận ra ~p*~qlà thẳng lên ngắn hơn -~p*-~q, ôi.
orlp

Làm thế nào bạn đã đảo ngược kỹ sư (p*q-2*(p+q))/4phần mặc dù? :)
orlp

Đó là phần khó nhất phải không? Về cơ bản, kiến thức về chức năng Carmichael và thực tế là p/2q/2đều số nguyên tố lẻ, và một loạt các thử và sai để tìm một cái gì đó sẽ làm việc sử dụng các nhân vật có sẵn.
Ilmari Karonen

Tôi cố tình chọn pq(những người thực sự, một trong những mã trong p-1q-1cho mục đích chơi gôn) như vậy (p-1)/2là chính để chúng ta có φ(φ(pq)) = ((p-1)/2-1)((q-1)/2-1). Điều này cho phép chúng ta tính toán nghịch đảo mô-đun của 65537mod φ(pq)(những gì chúng ta cần cho RSA) bằng cách sử dụng danh tính của Euler, khiến câu trả lời ngắn hơn rất nhiều vì chúng ta không cần phải thực hiện logic nghịch đảo mô-đun hoặc mã hóa một hằng số lớn khác. Ngoài -~q*-~p-> ~q*~p, bạn đã tìm thấy chính xác chức năng của tôi :)
orlp

1
Trên thực tế, để chọn một nit nhỏ, tôi tin φ(φ(pq)) = 2((p-1)/2-1)((q-1)/2-1)cho các số nguyên tố an toàn pq, bởi vì φ(4) = 2. Nhưng λ(φ(pq)) = lcm(2, (p-1)/2-1, (q-1)/2-1)nhiều nhất ((p-1)/2-1)((q-1)/2-1)/2, và bất kỳ bội số nào, trừ đi một, sẽ làm cho số mũ. :)
Ilmari Karonen

7

Python 3, 80 byte, Wolfram

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

Điều này thực sự rất khó để bẻ khóa! Tôi sử dụng thư viện bisect , được bao gồm trong bản phân phối Python 3. Các bisectchức năng có một danh sách được sắp xếp và một phần tử, và trả về chỉ số ngoài cùng bên phải, nơi các phần tử có thể được chèn vào để duy trì trật tự. Chúng tôi chỉ cung cấp cho nó qdanh sách dài các ô vuông bắt đầu từ 1và phần tử q.


1
Tôi sẽ đề nghị thay đổi (h+1)để -~h. Sau đó, tôi nhận ra rằng đó không phải là điểm chính của thử thách này: P
Sản xuất ETH

@ETHproductions Dù sao đó cũng không chính xác do ưu tiên của nhà điều hành.
Sp3000

@ Sp3000 Huh, tôi không có ý tưởng nào **có quyền ưu tiên cao hơn ~Python. Tôi cho rằng điều đó tốt hơn trong JS, trong đó -~2**2đưa ra lỗi cú pháp ("biểu thức đơn nguyên không được mã hóa không thể xuất hiện ở phía bên trái của '**'").
Sản phẩm ETH

@ETHproductions Họ thực sự đã làm điều đó để tránh sự mơ hồ, mà, như tôi có thể nói thêm, rất không ảnh hưởng đến hầu hết thiết kế JS.
Trái cây Esolanging

@ Challenger5 Trên thực tế, tôi phải không đồng ý với bạn ở đó: trong những năm gần đây, TC39 đã cực kỳ cẩn thận để đảm bảo mọi tính năng mới được thêm vào đều hoàn toàn không có sự mơ hồ nhất có thể (bao gồm cả **nhà điều hành, được thêm vào trong ES2017)
ETHproductions

6

Javascript, 21 byte, Arnauld

Nguyên

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

Nứt

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

Trả về khối lập phương.


Có bạn đi! ;)
Arnauld

@Arnauld: Tôi thấy hơi kỳ lạ khi JS cho phép bạn gọi các hàm với nhiều đối số hơn so với định nghĩa của chúng. Tôi tự hỏi ý nghĩ đằng sau đó là gì.
Emigna

6
Bạn nói đúng, JS cho phép điều đó theo thiết kế. Tuy nhiên, các đối số bổ sung không bị mất hoàn toàn vì chúng được lưu trữ trong đối tượng đối số có thể được hàm truy cập thủ công.
Arnauld

5

7, 9 byte, ais523

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

Bởi vì lực lượng vũ phu luôn chiến thắng, và 9! chỉ 362880


4

Chế biến.js , 59 byte, Kritixi Lithos

Nguyên:

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

Crack:

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

Vâng, điều đó là đủ dễ dàng. Phần khó nhất là tìm ra nơi để dán thêm dấu phẩy và dấu sao. May mắn thay, có vẻ như Xử lý cho phép thêm các tham số chức năng không được sử dụng cũng như các biểu thức dấu phẩy kiểu C.


1
Rõ ràng, thông dịch viên tôi liên kết là sai. Trên thực tế, hầu hết (hoặc thậm chí là tất cả) các trình thông dịch trực tuyến có thể sẽ sai vì Chế biến-java được biên dịch trước thành Treatment.js. Ngay bây giờ, tôi nghĩ rằng cách hành động tốt nhất sẽ là cho tôi và bạn thay đổi câu trả lời của chúng tôi thành "Chế biến.js" thay vì Xử lý vì khi đó câu trả lời của bạn sẽ hợp lệ (Xử lý-java đưa ra vô số lỗi). Tôi sẽ đăng một câu trả lời riêng với cùng mã với Xử lý-java, nhưng đối với điều này, trình thông dịch lồng sẽ là cài đặt nó từ process.org. Dù sao cũng được thực hiện!
Kritixi Lithos

4

JavaScript (ES6), 63 byte, SLuck49

Nguyên:

x=>eval(atob`eCp4KzEvLyAgfXBModLS4TvEn4wp1iys9YRRKC85KLIhNMC=`)

Crack:

x=>eval(atob`CgpNYXRoLnBvdyh4LTEsMC41KSAvLw4589CEIKKMRefipyz=`)

Mã base64 ở trên giải mã thành:



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

trong đó ...viết tắt của một đống rác ngẫu nhiên bị bỏ qua bởi trình thông dịch JS, vì nó là một bình luận.

Tôi tìm thấy giải pháp này bằng cách dùng thử và lỗi. Cuối cùng, phần duy nhất thực sự khó khăn là hai dòng mới vào đầu của mã này, cần thiết để làm cho các dòng còn lại lên đúng cách và để có được Mtrong Mathđể base64 mã hóa thành một cái gì đó là có sẵn trong bộ ký tự ban đầu. Trước tiên tôi đã thử các khoảng trắng, nhưng " M"mã hóa base64 vào "ICBN"và tôi cần chỉ có sẵn Bđể mã hóa ".po"sau này trong mã. "0+M", "1*M", "1?M"Hoặc bất kỳ tương tự tiền tố không-op khác tôi có thể nghĩ đến đã không làm việc một trong hai, nhưng dòng mới đã làm.

Tôi nghi ngờ đây có thể không chính xác là giải pháp dự định, nhưng bất cứ điều gì - nó hoạt động. :)

Bản giới thiệu:

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)))


Làm tốt công việc tìm kiếm thứ gì đó hiệu quả, tôi đã hy vọng việc đưa các nhân vật phụ vào lúc bắt đầu sẽ khiến việc này khó khăn hơn một chút
SLuck49

Ấn tượng :) Tôi đã thực hiện chính xác cách tiếp cận nhưng không nghĩ sẽ thử dòng mới. Tôi đã cố gắng để mất một C ở nơi khác nhưng không đi đến đâu.
Chris M


3

J, 8 byte, dặm

[:]-:[+:

Trao đổi đơn giản +:cho -:(gấp đôi cho một nửa).


Ngoài ra, bạn có thể hoán đổi các động từ trái và phải : [:[+:]-:.
Randomra



3

JavaScript (ES6), 46 byte, SLuck49

Bản gốc (tính ln (x + 1))

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

Nứt

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

Tôi sẽ không bao giờ phá vỡ điều này nếu tôi đã nhận ra rằng nghịch đảo là một tích Mathhợp . (lg=19979699+55686).toString(9+25)chỉ là một cách trở lại phức tạp "expm1".


Làm tốt lắm! Vâng, tôi đã xem qua các hàm trên Math để quyết định sử dụng cái gì, đã thấy expm1và nói "Đợi đã, đó là một thứ?"
SLuck49

2

J, 10 byte, dặm

1%:@*~>:[<

Tôi phải viết một cái gì đó ở đây vì câu trả lời quá ngắn.


2

J, 29 byte, Zgarb

Nguyên

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

Nứt

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

Hãy thử trực tuyến!

Một vết nứt tương đương là

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

Giải trình

[:(](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

Đúng, làm việc đó! Nó hơi khác so với giải pháp của tôi, nhưng có rất nhiều thời gian. Logic cơ bản là như nhau mặc dù.
Zgarb
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.