前提知識
- javascript読解
- バイナリに対する導入知識
解説
javascriptが変わっているが原理は同じなので読み直す
function assemble_png(u_in){ var LEN = 16; var key = "00000000000000000000000000000000"; // 32桁になってる var shifter; if(u_in.length == key.length){ // 入力は32桁 key = u_in; } var result = []; for(var i = 0; i < LEN; i++){ shifter = Number(key.slice((i*2),(i*2)+1)); // 飛び飛びで見てるだけだった for(var j = 0; j < (bytes.length / LEN); j ++){ result[(j * LEN) + i] = bytes[(((j + shifter) * LEN) % bytes.length) + i] } } while(result[result.length-1] == 0){ result = result.slice(0,result.length-1); } document.getElementById("Area").src = "data:image/png;base64," + btoa(String.fromCharCode.apply(null, new Uint8Array(result))); return false; }
よくよく見るとさっきの問題と変わらない。
候補を探すとこんな感じ。
0 | 8 14 1 | 8 2 | 2 3 | 9 4 | 2 5 | 4 6 | 2 6 7 | 4 8 | 7 9 | 3 4 10 | 3 4 11 | 4 6 13 | 4 14 | 8 15 | 6
全探索できるレベルなので、全部試す。
80802090204020407030306000408060が答え。
他の解法と違ったやつだけど、定期的に変わってるんだろうか。