0

11 月 11 日、中国のプログラマーの間で人気のゲームがありました。9 番目の質問はかなり難しいです (申し訳ありませんが、その URL には MD5 とセッションが含まれているため、ここに貼り付けることができます)。英語のキーワードで中国語で書かれたガイドがいくつかありました。そして、誰かが Haskell の 1 行でそれを解決しようとさえしました...

だから、質問:

次のような文字列が与えられ、次の質問への鍵を取得します。

01001000 00110100 01110011 01001001 01000001 01000011 01001010 01001011
01101110 01101100 01000001 01000001 01000001 00101011 00110001 01011010
01000010 00110001

バイナリ文字列全体をここの要点にコピーしました: https://gist.github.com/4054140

ガイドによると、バイナリ コードは base64 コードとして読み取ることができ、画像として表示できます。

私の質問は: これらのバイナリ文字列を base64 コードに解析する方法は?

4

2 に答える 2

0

私はそれを解析するために最善を尽くし、tarballを取得しました...目的地までわずか1歩ですが..

LiveScriptでの私のソリューション、それが役立つことを願っています...

require! \fs
require! \buffer
require! \path
require! \zlib
{exec} = require \child_process

show = console.log 

fs.read-file \string.txt \utf8 (err, file) ->
  # throw err if err?
  res = file
    .replace /\_/g, '1'
    .replace /\n/g, ' '
    .split ' '
    .map -> parse-int it, 2
    .map -> String.from-char-code it
    .join ''

  b = new Buffer res, \base64

  zlib.gunzip b, (err, data) ->
    fs.write-file \c.tar data
于 2012-11-15T11:48:10.453 に答える
0

これらは基数 2 の数値のように見えます。その場合、最初のセット ("01001000") から "010010" など、各数値の最初の 6 ビットを取得し、これらの 6 ビットの 10 進数値を取得できます。最初の数字の場合、10 を底とする 18 が得られます。

 base10 = parseInt("010010", 2) -> 18

次のステップは、その 10 進数の base64 を取得することです。この表によるとhttp://en.wikipedia.org/wiki/Base64 18 は「S」にマッピングされます

次に、最初の 8 ビット ("00") の残りの 2 セットと、次のセグメント ("0011") の 4 ビットを加えた 6 ビットの次のセットを取得し、同じ操作を実行します。

 base10 = parseInt("000011", 2) -> 3

ここでも、ウィキペディアのリンクによると、10 進数の 3 は「D」にマップされます。

そして、すべてのビットを処理するまで続けます。

このページには、基数 2 の数値を基数 10 に変換する方法に関する情報が少しあります: http://www.name-generators.com/javascript-2/how-to-make-binary-decimal-conversion-in-javascript。 htm

于 2012-11-15T05:16:42.343 に答える