如何在一个加密文本中加密不同的消息?

时间:2015-06-26 08:54:17

标签: algorithm encryption encoding cryptography

以下是更好地理解问题的示例:

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   完全响应的主题行“

其他功能正在提供不同的文本。

这里的问题是:如何在一个“瓶子”(加密文本)中加密不同的文本?

1 个答案:

答案 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