いくらなんでも長過ぎる。
- この暗号が解ければGoogleに就職できる? 今のところMITの学生もお手上げ
- Googleの暗号解読、2ちゃんねらーの回答は釣りだった。正解はJavaScriptでの復号化|デジタルマガジン
- 例の解ければ入社できるGoogle暗号の復号機を作ってみた - 5.1さらうどん
というわけで添削というか書き直し。
JavaScript
こんなもんでしょ。
#!/usr/bin/js
// decode
print(function(s){
var d = {};
for (var i = 0; i < 36; i++){
d['0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'.charAt(i)]
= '456789ABCDE2FGHIJKL0MNOP1QRS3TUVWXYZ'.charAt(i);
}
return s.replace(/./g, function(m){return d[m]})
}('8MLDQ6TUI6TFMLRHAANRA6Q8EFLDMQ86II2O32S5J13JXOJ'));
// encode
print(function(s){
var e = {};
for (var i = 0; i < 36; i++){
e['456789ABCDE2FGHIJKL0MNOP1QRS3TUVWXYZ'.charAt(i)]
= '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'.charAt(i);
}
return s.replace(/./g, function(m){return e[m]})
}('CONGRATULATIONSKEEPSEARCHINGORCALL6176390570X10'));
Perl
だともっと短く。まさに一行野郎。
#!/usr/bin/perl -l $_ = '8MLDQ6TUI6TFMLRHAANRA6Q8EFLDMQ86II2O32S5J13JXOJ'; # decode tr/0-9A-Z/4-9A-E2F-L0M-P1Q-S3T-Z/; print; # encode tr/4-9A-E2F-L0M-P1Q-S3T-Z/0-9A-Z/; print;
要するに単一換字式暗号。総当たりだと36!通りだけど、そこまで大変じゃないし、しかも暗号表が「あまりシャッフルされていない」ので、単換字暗号だと当たりを付ければ解くのはそれほど難しくないはずだけど、アルファベットだけではなく数字がハッシュされているのがポイントか。
GEPTKHTSEP3F1GHS
大事なのは、自分が出来る人間であるかのように見せることであって、本質を突くことではないからです。この記事に限らず、数学書など、少し専門的な内容に対する突っ込みに共通したことで、わかる人にはわかっているはず。