FTPクライアントにFTPサーバのログイン情報を登録したあと、ログインパスワードが分からなくなってしまうと、 そのクライアントを使えばログインできるのに自分ではパスワードが分からないという困った状態になる。 パスワードをタイプしなければならない場合に困るし(パスワードの変更とかウェブからのログイン)、 OSの再セットアップをすると永遠にログインできなくなってサイトの更新ができなくなってしまう。
パスワードを忘れてしまう自分がいけないといえばそれまでだが、 FFFTPでこのような状態になったときに、下の表を使うと、ffftp.ini からパスワード情報を復元できる。OSを再セットアップするときは、念のために ffftp.ini をバックアップしておくと良いかも。暗号を解読するのでなく直接エディットボックス・コントロールから読み取るツールもあります。
*は任意の一文字、解読欄で SP とあるのは半角スペース
FFFTP の暗号化はリニアな換字暗号(文字の置き換え)で、ソースも公開されてます。 半角英数字記号1文字につき3通りのパターンのどれかになり、 暗号化の結果は2文字または3文字。1文字めのASCIIコード番号が偶数のときは2文字、奇数のときは3文字になりますが、 追加される3文字めはダミーで、解読には関係しません。 例えば小文字の a は、FFFTPの暗号化を通すと、 RLという2文字になるか、AF* または eH* の3文字になります。 ここで*は任意の一文字。また、表の解読欄で SP とあるのは半角スペースです。
FFFTPをインストールしたフォルダにある ffftp.ini でパスワードは次のような感じで保存されてます。
[FFFTP\Options\Host61] Set=0 HostName=Sample HostAdrs=ftp.sample.net UserName=okamiki LocalDir= Password=eKLeJvVLVMeN}
上の例では、ログインは okamiki でパスワードが eKLeJvVLVMeN} と暗号化されているのですが、表をみると、 eK* の意味は m ですから、eKL が m です。 同様に、eJv が i, VL が c, VM が k, eN} がy なので、 パスワードは micky と分かります。
表を見るのが面倒なら、JavaScript でも簡単に実行できます。(ソースを飛ばす)
enc = "eKLeJvVLVMeN}"; plain = "", i = 0; while( i < enc.length ) { c1 = enc.charCodeAt(i), c2 = enc.charCodeAt(i+1); Rnd = c1 >> 4 & 0x3; Ch = c1 & 0xF | (c2 & 0xF) << 4; Ch <<= 8, Ch >>= Rnd, Ch = (Ch & 0xFF) | ((Ch >> 8) & 0xFF); plain += String.fromCharCode( Ch ); i = i + 2 + c1 % 2; } document.write("<p>解読結果: " + plain + "<\/p>");
出力例: 解読結果: micky