短い答え
いいえ。Base64は符号化です。どんなデータでも、無害な64種類の文字だけで書き表すやり方で、素のテキスト向けに作られたシステムを通り抜けても壊れないようにするためのものです。鍵はなく、秘密もなく、いかなる種類の安全性も持ちません。復号に要るのは、それと見分けることだけ。人間なら一瞥、計算機なら1ミリ秒です。
それでもこの問いには価値があります。取り違えは至るところにあり、ときに高くつくからです。Base64の文字列は、かき混ぜられて見えます。cGFzc3dvcmQ=は目に何も明かしません。そして、かき混ぜられて見えるものは「安全」の棚にしまわれます。実在の製品が、この方式で「保護した」パスワードとともに出荷されてきました。処方箋は、一度だけ覚える区別です。符号化は機械のため。暗号化は秘密のため。ハッシュは指紋のため。三つの仕事、三つの道具。何かを守るのは、そのうちひとつだけです。
符号化:誰でも戻せる
符号化が変えるのはデータの書き表しかたであって、中身は決して変わりません。メールの添付、スタイルシートに埋め込んだ画像、アドレスの中のトークン。どの場面でも、任意のバイト列が、テキストしか確実に運べない経路を通る必要があり、Base64はその標準の衣装です。3バイトが入ると、英数字と2種類の記号でできた4文字が出てきて、末尾は=で詰められます。あの末尾の=が目印で、一度覚えるとBase64はどこにでも見えてきます。
すべてを決める性質はこうです。レシピは公開されていて、逆向きにも同じように回る。知るべきことが何もないから、知らずにいられることも何もありません。アドレスのパーセント符号化(空白の%20)も、HTMLの実体参照(&)も、16進表記もバックスラッシュのエスケープも、同じ考えの衣装違いです。そしてここのBase64エンコーダー・デコーダーはそのすべてを、両方向に、あなたの機械の上で話します。見つけた文字列を復号することは、それを読むことと寸分違わず正当です。符号化は、最初から錠前ではなかったのですから。
暗号化:鍵の持ち主だけが戻せる
中身を実際に守るのは暗号化です。データを鍵で変換し、数学は、鍵なしの逆変換が単に難しいのではなく計算として手の届かないところにあるように、そして鍵があれば一瞬で済むように組まれています。秘密は方式にではなく、鍵にだけ住んでいます。アルゴリズムは公開され、標準化されていて、だからこそ強いのです。
見た目の取り違えが噛みつくのはここです。暗号化されたバイト列は、旅ができるように、日常的にBase64で符号化されます。まず鍵でかき混ぜ、それから輸送用の衣装を着せる。二つの層、二つの仕事。JSON Web Tokenは教科書の実例です。ドットでつながれた三つのBase64の断片のうち、最初の二つは、試した誰にでも読めるJSONに復号されます。全体が封印されていると思い込んで、公開のウェブデコーダーにトークンを貼る人が毎日います。正直な言い方をすれば、JWTは偽造防止の署名が付いた葉書であって、封筒ではありません。
ハッシュ:誰にも戻せない
ハッシュは一方向にしか走りません。どれだけのデータでもSHA-256に通せば、固定サイズの数がひとつ出てきます。同じデータには毎回同じ数、1ビットでも違うデータにはまるで別の数。そして数からデータへ戻る道は、誰にも、鍵があってもなくても、ありません。衣装でも錠前でもなく、指紋です。
だからこそ、ハッシュに属する二つの仕事の正しい道具になります。ダウンロードしたファイルが発行者の公開したものと寸分違わないことの確認。指紋を突き合わせる仕事で、ハッシュ・チェックサムの道具があなたの機械の上でやり、専用のガイドもあります。もうひとつはパスワードの保管。まともに運営されるサービスはあなたのパスワードのハッシュだけを保管し、だからこそ盗まれたデータベースにさえパスワードそのものは入っていません。忘れたパスワードをメールで送り返せるサイトは、一度もハッシュ化していなかったと白状しています。そして設定ファイルがパスワードをcGFzc3dvcmQ=と書いて「保護」しているなら、符号化しかしていなかったと白状しているのです。
野外での見分けかた
目の前の文字列に効く近道です。
- 復号したら読めるものが出てきた?なら符号化でした。英字と数字、たまに
+と/、末尾にしばしば=。デコーダーに通して見てください。 - 復号したらバイナリの雑音が出てきた?ならBase64は衣装にすぎず、下にあるのは暗号化されたものか、圧縮されたものか、そもそもテキストでなかったものです。どちらにせよ、符号化は何も教えてくれません。
- 長さが固定、16進の文字、決して復号できない?16進64文字はSHA-256の輪郭、32文字はMD5の輪郭です。ハッシュは復号しません。一致するか、しないか、それだけです。
そして、それぞれの実務の教訓です。秘密を符号化に預けないでください。プラットフォームが暗号化を積んでいるのに自作しません。パスワードをハッシュ以外の形で保存しません。ところで、確かめるために復号するその文字列こそが機微な部分ということもよくあります。デバッグ中のトークンはたいていそうです。ここのデコーダーが、秘密がすでにある場所——あなたの機械——で走るのはそのためですし、ウェブの道具への貼り付けが実際に何をするかに専用のページがあるのも、同じ理由です。