以下是更好地理解问题的示例:
2.0.0-p353 :003 > puts Base64.decode64 content
Glad to see we managed to get your attention!
You'll find our message in the bottle. Choose one or more tools to open it;
drop me a mail if you're interested in working together.
$!'<
]!N3
!9<Z]NWl!Z]N
Q!]90!NW
<6<K$E
!'$*B0
K-!N3!
QW0o<!
f$Z!fW
<]]0K!<K!Q
l]9NK!`Z<K6!-?$K6N
!Z]NQ!f0!Z]<EE!`Z0!]90
H!$!EN]!Z]NQ!$--!]90!fNW
-!Z<EElf$EBZ!]N!]90!Z`'?
0*]!E<K0!N3!lN`W!W0ZQNKZ
0!3`EEZ]NQg1"LO^"OLFm"a[
1"@%d%[+X=R^"(a^"+OIR=F1
"IOX1"F%L7a%71["^O"=^"F=
C1":%j1"1FI"+O4411[+X=R^
"^mR1[+X=R^"[^OR"%.."^:1
"R:X%[1"RmX%I=.O4.OOI"^O
"^:1"[a(@1+^"F=L1"O4"mOa
X"X1[ROL[1"4aFF[^ORh2#&Y
2#JPe>M8#_P#&#\2Ye>,2#PY
>2M_2/#&Y,;>_2,_bY2#PM#&
#AeJ#)&\2/#\_&,D#b\>M8#\
PJ2#G>)Y&Y>2\#PS2M\PbY,2
/#)n#M2_5G>k#\_PS#&//#_;
2#hPY/#J>G&MP#_P#_;2#\b)
A2,_#G>M2#h;2M#\2M/>M8#b
\#&#J&>G#5bGG\_PS
CLUE #1
def decode_char(ch):
x = ord(ch) - 33
return None if (x % 3) else ' ' if x < 3 else chr(x / 3 + 64)
CLUE #2
function decodeChar(ch) {
var x = ch.charCodeAt(0) - 33
if (String.fromCharCode(x % 3 + 64) != 'A')
return null;
else if (x < 3)
return ' ';
else
return String.fromCharCode(x / 3 + 64)
}
CLUE #3
def decodeChar(c: Char): Option[Char] = c.toInt - 33 match {
case 2 => Some(' ')
case x if x % 3 > 1 => Some((x/3 + 64).toChar)
case _ => None
}
=> nil
瓶子下面列出的功能会以不同的方式解码瓶子。例如,JS代码给出了:
“我们不仅仅使用JAVASCRIPT,而且还要像对待HAXE那样编写更多语言 ELM COFFEESCRIPT TYPESCRIPT停止添加PHYASE PYRAMIDOFDOOM到THE 完全响应的主题行“
其他功能正在提供不同的文本。
这里的问题是:如何在一个“瓶子”(加密文本)中加密不同的文本?
答案 0 :(得分:1)
每个字符都有一个编码的值,表示解码所需的算法。
return None if (x % 3)
- &gt;任何不是3的倍数(n%3!= 0)的东西都会被忽略。
if (String.fromCharCode(x % 3 + 64) != 'A') return null;
- &gt;所有字符不(n * 3)+1,即n%3!= 1,将被忽略
if x % 3 > 1 => ...
- &gt;只有(n%3)&gt;的字符1,即n%3 = 2,被解码,其他被忽略。
编辑:
加密可以推断为
c_output = ((c_input-64) * 3) + msg_no
其中msg_no
是输入字符所属的消息编号(小于3)。
如果您使用大于3的数字,则可以将更多不同的消息编码到同一个流中。但是,c_output
仍然在数据类型的有效范围内非常重要,例如单个ASCII字符或字节。使用3个不同的消息流,无法编码µ
(ASCII中的代码181):(181-64) * 3 > 255
。同样,9
(ASCII中的代码57)无法编码,因为(57-64)*3 < 0
。