*情報 作者名:Craving研究家 *[[ダウンロード>http://www26.atwiki.jp/isoroku_be/?cmd=upload&act=open&page=%E2%97%8FBASE64%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E4%BB%95%E7%B5%84%E3%81%BF&file=BASE64%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%89%E3%83%BB%E3%83%87%E3%82%B3%E3%83%BC%E3%83%89.nako]] *概要 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デコードの他の仕方 ●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を直接引く 結果で戻る ---- 総合:&counter() 今日:&counter(today)人 昨日:&counter(yesterday)人 #comment() ----
下から選んでください: