base64とは、7bitコードを前提としたメール通信において8bitコードを必要とする日本語などの英語圏以外の言語や、画像などのバイナリファイルを送受信する為に考え出されたものです。
base64 encodeは、まず元になるデータを3byte(24bit)毎に分割し、次に分割したデータから6bit(000000〜111111で64通り)ずつ読み取り、それを0〜63までの10進数とみなして64種類の英数記号(大文字のアルファベット、小文字のアルファベット、0〜9の数字、+、/)を用いた変換テーブルに対応させて変換します。
このようにすることで、データ量は4/3倍に増えますが、画像でもテキストでも64種類の記号を用いて符号化する事ができます。
なお、元のデータを3byte毎に区切ると最後のデータが1byte足りなくなる場合は'='を、2byte足りなくなる場合は'=='を、変換後のデータの末尾につけるという事になっています。
base64 decodeは、こうして符号化されたデータに対して逆の処理を行い復元します。
base64 encodeされたデータに対し、パスワードを元に64種類の英数記号の変換(A⇒c,B⇒+など)を行うものです。
別の言い方をすれば、64種類の英数記号の変換テーブルをパスワードを元に配列変換し、それを用いてbase64 encodeを行うということです(下図)
| パスワード[***] ↓ 配列変換 ⇒ |
|
復号化は、base64cryptされたデータに対し、パスワードを元に英数記号の変換を行った後、base64 decodeします。
上記同様、別の言い方をすれば、パスワードを元に変換テーブルの配置換えを行い、それを用いてbase64 decodeを行うということになります。
※base64 encode/decodeはMIME規格によるものですが、base64cryptはそれとは全く別の独自のものです。したがって、他のbase64を用いた暗号化とは互換性がありません。
パスワードが漢字を含む日本語(全角)3文字ということが分っている場合、もっとも単純な解読方法は、日本語総当り(2000文字として80億通り)で復号化をかけるか、あるいはパスワードをbase64 encodeされた8文字の半角英数記号として64^8=281474976710656通りの総当りで直接復号化するものです。
復号化は間違ったパスワードでもエラーは起こりませんので、正しい文字列となっているのか目で見て確認する必要があります。
(プログラムを組めばもっと効率の良い方法があるにはあります)
但し、暗号化の仕組上、正しいパスワードでなくても一部の【文字列】が復元されてしまう事があります。
これは暗号化パスワードの文字数をある程度(全角で8文字)以上にする事により、殆ど防ぐ事が出来ます。
なお、パスワードの文字数に制限はありませんが、極端に多い文字数の場合、別の文字列でも完全に復号化できる可能性があります。
(配列の組み合わせは64!≒1.27×10^89通りありますが、一定のルールで組み替えを行っている為、パスワードによっては文字数、文字列が違っても同じ配列となる可能性がある為です)
b64crypt_test.cgi ver0.0.2
powered by framework.pl ver0.0.5.19