情報
作者名:Craving研究家
概要
BASE64の仕組みです。これをカスタマイズすれば結果をバイナリや配列で返したり、独自の暗号化アルゴリズムが作成できます。
サンプルプログラム
「こんにちは」をBASE64エンコードB
それを表示
それをBASE64デコードB
それを表示
本体
!B64_TABLE=『ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=』
●BASE64エンコードB(Sを)
結果とは文字列;ARYとは配列
Iで1から(Sのバイト数)まで繰り返す
ASC(MIDB(S,I,1))をARYに配列追加
MDとは整数=ARYの配列要素数%3
もし、MD!=0ならば(3-MD)回(0をARYに配列追加)//"="の代わりに"A"を付加
Iとは整数;TMPとは整数
(I<(ARYの配列要素数-1))の間
TMP=(ARY[I]<<16)||(ARY[I+1]<<08)||(ARY[I+2]<<00)
結果にMIDB(B64_TABLE,((TMP>>18&&$3F)+1),1)を追加
結果にMIDB(B64_TABLE,((TMP>>12&&$3F)+1),1)を追加
結果にMIDB(B64_TABLE,((TMP>>06&&$3F)+1),1)を追加
結果にMIDB(B64_TABLE,((TMP>>00&&$3F)+1),1)を追加
I=I+3
もし、MD!=0ならば//付加した"A"を"="に置換
MD=3-MD
結果=LEFTB(結果,(結果のバイト数-MD))
MD回(結果に「=」を追加)
結果で戻る
●BASE64デコードB(Sを)
S=Sの「=」を空に置換
MDとは整数=Sのバイト数%4
Iとは整数;Jとは整数
TMPとは整数;DATとは配列
MD回(Sに"A"を追加)// "="を"A"に置換
(I<(Sのバイト数))の間
TMP=(B64_TABLEの0からMIDB(S,I+1,1)をバイト検索<<18),
||(B64_TABLEの0からMIDB(S,I+2,1)をバイト検索<<12),
||(B64_TABLEの0からMIDB(S,I+3,1)をバイト検索<<06),
||(B64_TABLEの0からMIDB(S,I+4,1)をバイト検索<<00)
DAT[J+0]=(TMP>>16)
DAT[J+1]=(TMP>>08)&&$FF
DAT[J+2]=(TMP>>00)&&$FF
I=I+4;J=J+3
結果とは文字列
DATで反復(CHR(対象)を結果に追加)
結果=LEFTB(結果,結果のバイト数-MD)//付加した"A"を排除
結果で戻る
BASE64デコードの他の仕方
こっちの方が意味はともかく高速
!B64_TABLE=『ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=』
●BASE64デコードC(Sを)
結果とは文字列
Pとは数値=-8;Aとは数値
Cとは数値;Dとは数値
Iで1から(Sのバイト数+1)まで繰り返す
C=(SのIから1バイト抜き出す)をB64_TABLEの0からバイト検索
もし、C<0ならば続ける
A=(A<<6)||(C&&63)
P=P+6
もし、P>=0ならば
D=(A>>P)&&255
もし、C!=64ならば
結果にCHR(D)を追加
A=A&&63
Pから8を直接引く
結果で戻る
総合: -
今日: - 人
昨日: - 人
最終更新:2012年02月07日 06:57