mursのColdFusionメモ

頭の中から抜け落ちていく情報をメモがわりに書き溜めていくブログです。

ColdFusionでbase64urlのデータを取り扱いたい

これも、何年か前に尋ねられた事だ。その時のメモを見つけたので、ここにも貼っておこう。

ColdFusion 2021は BinaryEncode(), BinaryDecode()関数でbase64Urlの変換に対応している

「ColdFusionでBase64urlのデータをデコードしたいんです」と言われた時、Base64urlって何???ってなった。

知らないなぁ。。。で話が終われそうになかったので、当時、調べてみた。URLセーフなBase64ってことか。

tools.ietf.org

このページの説明がとても詳しくて分かりやすい!

qiita.com

なるほど。Base64で文字列に変換した際にURL変数の値として渡した際に問題になりそうな文字があるから、「+ を - に」、「/ を _ に」変換して、そして、末尾の「=」を削除すると。

じゃあ、Base64urlの値をBase64に戻すには、ReplaceList()関数で #ReplaceList("Base64urlでエンコードされた値","-,_", "+,/") で変換して、 末尾の「=」は、BASE64の規格で各6ビットの値を変換表を使い4文字ずつ変換した際に、4文字に満たない分「=」を追加して4文字にしているんだから Len("Base64urlでエンコードされた値") Mod 4 で余りを計算して、余った数だけ「=」を追加すれば良いんだ。

動きは理解したからあとはプログラムを書けば良いのだけれども、どこかにColdFusionベースのサンプルが掲載されていないかな?と探したら、海外のColdFusionユーザーでBennadel氏(自分が最も頼りにしている)のブログにそのものズバリのプログラムを見つけた。紹介しているプログラムも分かりやすい。これで解決。

www.bennadel.com

ColdFusion 2021ではBase64Urlのエンコード・デコードをサポート

ColdFusion 2021の機能強化で、BinaryEncode()BinaryDecode() のBase64Url エンコーディングがサポートされたので、ColdFusion 2021では標準の関数で対応できるようになった(まだ、動作は試していないけど)。

helpx.adobe.com