●BASE64エンコードの仕組み

情報

作者名: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を直接引く
 結果で戻る

総合: -
今日: -
昨日: -
名前:
コメント:

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2012年02月07日 06:57
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。