密码破解者和编剧


18

假设您有一些文本,并且希望将其发送给您的朋友,但是您不希望其他任何人阅读。这可能意味着您想对其加密,以便只有您和您的朋友才能阅读它。但是,有一个问题:您和您的朋友忘记了加密方法的约定,因此,如果您向他们发送消息,他们将无法对其解密!

考虑了一段时间后,您决定只向您的朋友发送代码,以将消息和消息一起加密。您的朋友很聪明,因此他们很可能可以通过研究加密方法来弄清楚如何解密邮件。

当然,由于其他人可能正在阅读该消息,因此您希望选择一种加密方案,以使其尽可能难以破解(找出解密方案)。

警察的任务

在这个挑战中,警察将扮演作家的角色:您将设计一种将字符串转换为字符串的加密方案。但是,此加密方案必须是双射的,这意味着没有两个字符串必须映射到另一个字符串,并且每个字符串都可以通过输入映射到。它只需要一个输入即要编码的字符串。

然后,您将发布一些执行加密的代码,并使用您的代码详细说明的方案加密一条消息。

由于您是按字节付费发送消息,因此分数将是代码的长度加上密文的长度。如果您的答案被破解,您将获得无穷大。

一个星期后,您可以显示文字并将答案标记为“ 安全”。安全的答案是那些无法破解的答案。

强盗任务

强盗可以扮演作家的朋友,也可以扮演恶意的中间人(没有实质性的区别,但是您可以扮演角色,就像这样做更有趣)。他们将采用加密方案和密文,并尝试找出加密的消息。一旦他们找出了加密的消息,便会将其发布在评论中。(这个问题不会有单独的强盗线程。)

赢家将是裂缝最多的强盗。


这是一个破解解决方案的示例:

购买更多橙子


如果编码是双射的,则域和共域是什么?
Leaky Nun

带有哪些字符的字符串?
Leaky Nun

1
@WheatWizard哪个256?您是说256 个字节不是字符,对吗?
暴民埃里克(Erik the Outgolfer)'17年

7
是什么阻止某人使用加密安全功能?
Tutleman '17

2
证明双射性的责任在谁身上:警察还是潜在的强盗?即,如果未知函数是否是双射的,会发生什么?
斯蒂芬,

Answers:


5

果冻,57 + 32 = 89字节(破解

“¡ḟċ⁷Ḣṡ⁵ĊnɠñḂƇLƒg⁺QfȥẒṾ⁹+=?JṚWġ%Aȧ’
O‘ḅ256b¢*21%¢ḅ¢ḃ256’Ọ

加密的消息:

EªæBsÊ$ʳ¢?r×­Q4e²?ò[Ý6

作为十六进制字符串:

4518AAE6421973CA
9724CAB3A23F72D7
AD18855134651810
B23F1CF25BDD9036

说明:

O‘ḅ256b¢*21%¢ḅ¢ḃ256’Ọ
O                     convert each into codepoint
 ‘ḅ256                convert from bijective base 256 to integer
      b¢              convert from integer to base N
        *21           map each to its 21th power
           %¢         modulo N
             ḅ¢       convert to integer from base N
               ḃ256’  convert from integer to bijective base 256
                    Ọ convert each from codepoint

N字符串“¡ḟċ⁷Ḣṡ⁵ĊnɠñḂƇLƒg⁺QfȥẒṾ⁹+=?JṚWġ%Aȧ’是在哪里编码的,即数字105587021056759938494595233483151378724567978408381355454441180598980268016731

同样,这是N上面给出的和公共密钥的RSA方法21。破解这等于找到的两个主要因素N


好。我可以使用找到的密钥解密自己的加密消息,但是您的似乎失败了。:-/(预期结果不是4个字符的非英语消息,是吗?)
Arnauld

3
消息是_ìNb在线尝试!)。
Anders Kaseorg '17

@AndersKaseorg是的。那就是我所拥有的,但是我期望有一些更有意义的东西。:-)
Arnauld

1
对于它的价值,是我一边使用的代码。
Arnauld

1
@AndersKaseorg Jelly尝试评估它的参数,因此确实可以使用空字节。tio.run/##y0rNyan8/9//////6jEGIKgOAA
丹尼斯

5

果冻,88 + 64 = 152字节

加密功能:

“¥@ɦ⁺€€Ṅ`yȤDƁWĊ;Y^y⁻U ⁸ßɠƁXẹṡWZc'µ÷ḷỊ0ÇtṙA×Ḃß4©qV)iḷỊDƭ Mṛ+<ṛ_idðD’
O‘ḅ256b¢*21%¢ḅ¢ḃ256’Ọ

加密的消息:

AX!?ÖÍL¹    JÓ°û0àah4Û{µÌá`
^tÝrRÕù#êwðãTÓK"Íû´Ëß!øòOf«

作为十六进制字符串:

9F419458213FD6CD4CB9094A10D3B0FB
8F30E0616834DB7BB517CCE1600A5E74
DD7252D5F923EA77F0E354D34B9F22CD
FB80B4CBDF21F80E94F24F9A66AB9112

说明:

O‘ḅ256b¢*13%¢ḅ¢ḃ256’Ọ
O                     convert each into codepoint
 ‘ḅ256                convert from bijective base 256 to integer
      b¢              convert from integer to base N
        *13           map each to its 13th power
           %¢         modulo N
             ḅ¢       convert to integer from base N
               ḃ256’  convert from integer to bijective base 256
                    Ọ convert each from codepoint

N字符串在哪里编码:

“¥@ɦ⁺€€Ṅ`yȤDƁWĊ;Y^y⁻U ⁸ßɠƁXẹṡWZc'µ÷ḷỊ0ÇtṙA×Ḃß4©qV)iḷỊDƭ Mṛ+<ṛ_idðD’

这是数字

15465347049748408180402050551405372385300458901874153987195606642192077081674726470827949979631079014102900173229117045997489671500506945449681040725068819

同样,这是N上面给出的和公共密钥的RSA方法13。破解它等于找到的两个主要因子N,具有512位。


2
我爱你的加密字符串看起来像你的代码
Skidsdev

使用这个很棒的程序,我相信在宇宙热死后的几千年中,我可以破解您的解决方案。
苏格拉底凤凰城

通过试验划分的@SocraticPhoenix分解永远不可能接近二次筛。
Leaky Nun

@LeakyNun我听不懂您的数学大词汇……
苏格拉底菲尼克斯

@SocraticPhoenix您的程序尝试从2中选择每个因子,而二次筛则要快得多。它可以在6分钟内分解出一个256位的半素数,而您的程序本来就需要永恒。
Leaky Nun

3

JavaScript(ES6),43 + 33 = 76字节,由Leaky Nun破解

加密功能,43字节:

s=>[...s].sort(_=>Math.cos(i++),i=0).join``

加密的消息,33字节:

注意:此加密方法取决于浏览器。

FireFox: "ty a)s kaasoeocr!hTt; o s  -cwaoo"
Chrome : "oht aasoaoas   e)tosr;oky c!-cw T"
Edge   : "tskso ;- caroteoTha wa soo ay c!)"

T! a)o khas eotrto-c; o sa cwsaoy
Leaky Nun

@LeakyNun Err ...不
Arnauld

我的答案会产生什么?
Leaky Nun

您正在使用哪个浏览器?我正在使用Chrome。
Leaky Nun

6
That was soooo easy to crack! -;)(我用Firefox破解了它)
Leaky Nun

3

脑高尔夫球,破裂

(d1&,&g)&@

在线尝试!

加密的消息,45字节(UTF-8)

°Áݭїϳ{ًչםק{їϳэÁק{|э³קѡ|

加密消息的十六进制代码

C2 B0 C3 81 DD AD D1 97 CF
B3 C2 90 7B D9 8B D5 B9 D7
9D D7 A7 7B D1 97 CF B3 D1
8D C3 81 D7 A7 7B 7C D1 8D
C2 B3 D7 A7 D1 A1 7C C2 85

解密邮件

C'mon, this one's *easy*!

说明

(d1&,&g)&@  Implicit input from commandline args
(......)    Foreach loop, foreach codepoint of input
 d          Split into digits
  1         Push 1
   &,       Reverse
     &g     Concatenate
        &@  Print

解码器

只能通过更改3个字符来制作解码器。简单地删除1和插入$_其间&,&g

(d&,$_&g)&@

您可以提供TIO吗?
Kritixi Lithos'7

1
C'mon, this one's *easy*!
KSmarts '17

@KSmarts正确!
Skidsdev

g没有证件吗?
Leaky Nun

这是双射的吗?
Leaky Nun

3

JavaScript(ES6),96 + 9 = 105字节

q=>Buffer(q).map((a,i,d)=>d[i-1]^Math.abs(1e16*Math.sin(d[i]+i))%255).sort((a,i)=>Math.tan(a*i))

密文(十六进制编码): 7d111c74b99faff76a

在线尝试!

样本输出(使用V8引擎):

abc123-> db48ea4f86b9

您好-> 1b3420f5ab


提交无效:多个纯文本生成相同的密文。例如:“ C”,“ D”。这仅计入第一个字符。在256种可能的输入中,只有165种唯一的输出。
Mark Jeronimus

它是预期范围(ASCII A到ASCII z)的双射
iovoid

我只是告诉你不是。只需使用“ C”和“ D”作为输入字符串尝试您的代码。输出字符串相同76
Mark Jeronimus
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.