符号化コマンドとしての StreamRelay.NET.exe

Base64 とか Base32 などは、フィルタストリームとして実装しているので、netstream スキームの Proxy オブジェクトとして、多段Proxy のように設定する事が可能

### 符号化コマンドとしての StreamRelay.NET.exe

`C:\>type a.txt
HelloWorld
C:\>StreamRelay.NET.exe -LocalPort 0 -RemotePort 0 -LocalInputFile a.txt -RemoteOutputFile a.txt.out -RemoteProxy netstream:///?Base64encode
C:\>type a.txt.out
SGVsbG9Xb3JsZA==
C:\>StreamRelay.NET.exe -LocalPort 0 -RemotePort 0 -LocalInputFile a.txt.out -LocalProxy netstream:///?Base64decode
HelloWorld`

### 符号化のオプションというか、様々なアルゴリズムの一覧

`StreamRelay.NET.exe -ListFilter`

#### 符号化のオプションというか、様々なアルゴリズムの一覧(Base16系)

- Hexdecode/Hexencode

いわゆる **ヘキサ表示** とか **16進数表示**

- Urldecode(="CharSet")/Urlencode → URLエンコード(「%」+16進数表示)
- Quoteddecode(="CharSet")/Quotedencode → QuotePrintable(「=」+16進数表示)

#### 符号化のオプションというか、様々なアルゴリズムの一覧(Base64系)

- Base64decode/Base64encode は63番目→「+」、64番目→「/」、パディング→「=」
- Base64decodeFileSafe/Base64encodeFileSafe は63番目→「+」、64番目→「-」、パディング→「=」
- Base64decodeUrlSafe/Base64encodeUrlSafe は63番目→「-」、64番目→「_」、パディング→「=」
- Base64decodeXmlName/Base64encodeXmlName は63番目→「.」、64番目→「-」、パディング→「=」
- Base64decodeXmlId/Base64encodeXmlId は63番目→「_」、64番目→「:」、パディング→「=」
- Base64decodeRegularExpression/Base64decodeRegularExpression は63番目→「!」、64番目→「-」、パディング→「=」
- Base64decodeProgramid1/Base64encodeProgramid1 は63番目→「_」、64番目→「-」、パディング→「=」
- Base64decodeProgramid2/Base64encodeProgramid2 は63番目→「.」、64番目→「_」、パディング→「=」
- BinHexdecode/BinHexencode は Base64 のような置換
- BinHexdecorate/BinHexencorate は BinHex の装飾処理
- XXdecoding/XXencoding は Base64 のような置換
- Radix64decode/Radix64encode は Base64 のような置換
- uudecoding/uuencoding は Base64 のような置換
- yenc/ydec は Base64 のような置換
- Pack6decode/Pack6encode もたしか Base64 のような置換だった気がする
- defish/enfish は Base64 のようなおさかな符号化
- defish="CharSet"/enfish="CharSet" は65種類(65番目はパディング)を並べる
- Base64decodeCustom="Seed(size=65)"[CharSet]/Base64encodeCustom="Seed(size=65)"[CharSet] も65種類(65番目はパディング)を並べる(文字コードも指定できる)

具体的なシードなどは [Base64 Wikipedia](https://en.wikipedia.org/wiki/Base64) と [yEnc Wikipedia](https://en.wikipedia.org/wiki/YEnc) と [Xxencoding Wikipedia](https://en.wikipedia.org/wiki/Xxencoding) と [Uuencoding Wikipedia](https://en.wikipedia.org/wiki/Uuencoding)



#### 符号化のオプションというか、様々なアルゴリズムの一覧(Base32系)

Plugin.sEncoding.dll に実装した。

- Base32Encode/Base32Decode → 普通の Base32
- Base32EncodeRfc4648/Base32DecodeRfc4648 → RFC4648方式
- Base32EncodeHex/Base32DecodeHex → Base32Hex方式
- Base32EncodeCrockford/Base32DecodeCrockford → Crockford方式
- Base32EncodeCustom/Base32DecodeCustom → Base64と同じように、自由にシードを設定する事がてきるよ

具体的なシードなどは [Base32 Wikipedia](https://en.wikipedia.org/wiki/Base32)

#### 符号化のオプションというか、様々なアルゴリズムの一覧(Base85系)

- Base85decodeRfc1924/Base85encodeRfc1924 → RFC1924形式
- Base85decodeZ85/Base85encodeZ85 → Z85形式
- Base85decodeZmodem/Base85encodeZmodem → Zmodem形式
- Base85decodebtoa/Base85decodebtoa → btoa形式
- Base85decodebtoa42/Base85decodebtoa42 → btoa ver4.2 形式
- Base85decodeAdobe/Base85decodeAdobe → Adobe 形式
- Base85decodecustom="Seed(size=85)"[CharSet],"CompressionChars"/Base85encodecustom="Seed(size=85)"[CharSet],"CompressionChars" → 85種類の文字と文字コードと圧縮文字を自由に指定

具体的なシードなどは [Ascii32 Wikipedia](https://en.wikipedia.org/wiki/Ascii85)

#### 符号化のオプションというか、様々なアルゴリズムの一覧(Base36系)

- Base36decode32/Base36encode32 → 32bit単位で Base36 する
- Base36decode64/Base36encode64 → 64bit単位で Base36 する
- Geohash36decode32/Geohash36decode32 → 32bit単位で Geohash 方式で Base36 する
- Geohash36decode64/Geohash36decode64 → 64bit単位で Geohash 方式で Base36 する
- Base36decode32custom="Seed(size=36)"[CharSet]/Base36encode32custom="Seed(size=36)"[CharSet] → 32bit単位で指定した36文字の Base36 を実施する
- Base36decode64custom="Seed(size=36)"[CharSet]/Base36encode64custom="Seed(size=36)"[CharSet] → 64bit単位で指定した36文字の Base36 を実施する

具体的なシードなどは [Base36 Wikipedia](https://en.wikipedia.org/wiki/Base36)

#### 符号化のオプションというか、様々なアルゴリズムの一覧(Base94系)

シードは一つのタイプなので、一つだけ

- Base94decode/Base94encode

#### 符号化のオプションというか、様々なアルゴリズムの一覧(Base122系)

シードは一つのタイプなので、一つだけ

- Base122decode/Base122encode

#### 符号化のオプションというか、様々なアルゴリズムの一覧(Base65535系)

2バイトを UTF16(サロゲートペア含) とみなして文字列化する。
シードは一つのタイプなので、一つだけ

- Base65536decode/Base65536encode

### 完全バッファリングタイプの符号化

オプションで「bBase・・・・」というのは、完全バッファリングするタイプとなっている。
例えば「bBase91decode」は、ストリームを全部読みきって(Closeするまで、StreamRelay.NET.exe上のメモリにバッファリングする)から、全体のバイト配列を91進数と256進数の変換処理を実施する。
そのために、[BigInteger構造体](https://msdn.microsoft.com/ja-jp/library/system.numerics.biginteger(v=vs.110).aspx)などを利用している

#### 符号化のオプションというか、様々なアルゴリズムの一覧(Base58系)

完全バッファリングの方式のみだけど、以下のタイプがある

- bBase58decodeFlickr/bBase58encodeFlickr → Flickr方式のシードを使う
- bBase58decodeBitCoin/bBase58encodeBitCoin → BitCoin方式のシードを使う
- bBase58decoderipple/bBase58encoderipple → Ripple方式のシードを使う

具体的なシードなどは [Base58 Wikipedia](https://en.wikipedia.org/wiki/Base58)

#### 符号化のオプションというか、様々なアルゴリズムの一覧(Base2系)

- KensiroDecoding/KensiroEncoding → ケンシロウ進数
- KensiroDecoding3/KensiroEncoding3 → ケンシロウ進数3(圧縮)
- PipiruDecoding/PipiruEncoding → ドクロちゃん進数
- Base2Decode/Base2Encode → ふつうの2進数

Kensiro[En|De]codingでは、オプションとして[基数文字(文字コード)]
という指定もできる。
例えば、

- KensiroEncoding=ぬふUTF-8

だと「ぬ→0」「ふ→1」で文字コード「UTF-8」という事になる。
つまり、

KensiroEncoding
⇔
KensiroEncoding=たあShift-JIS
⇔
KensiroEncoding=たあ

は同じ設定。

また

PipiruDecoding
⇔
KensiroEncoding=るぴShift-JIS
⇔
KensiroEncoding=るぴ
も同じ設定

#### 符号化のオプションというか、様々なアルゴリズムの一覧(Base8系)

3Byte(24Bit)を一つのブロックとして、8進数に変換する。

- Base8decode[=[Seed][CharSet]]
- Base8encode[=[Seed][CharSet]]

で、3Byte(24Bit)単位で、符号化を実施する。
2Byteのカケラは18文字。
1Byteのカケラは9文字。
を返す。

Base8encode=01234567
⇔
Base8encode=01234567UTF-8
⇔
Base8encode

は同じ設定

#### 符号化のオプションというか、様々なアルゴリズムの一覧(BaseNN系)

以下のオプションは、文字コードとシードを自由に設定できる

- bBaseNNdecode=["CharSet",]"Seed"
- bBaseNNencode=["CharSet",]"Seed"

Charset に文字コード、Seed に与えた文字数を基数となる符号化を実施する

#### 符号化のオプションというか、様々なアルゴリズムの一覧(ビット演算系)

- inputNot/outputNot → NOT演算(ビット反転)
- inputRot256="num"/outputRot256="num" → ROT演算(何ビット加算/減算するか)(シーザー暗号っぽく)
- inputXor="file"/outputXor="file" → 指定したファイルと XOR 演算する
- inputOr="file"/outputOr="file" → 指定したファイルと OR 演算
- inputAnd="file"/outputAnd="file" → 指定したファイルと AND 演算
- inputXorHex="HexValue"/outputXorHex="HexValue" → 指定した16進表記のバイト配列と XOR 演算
- inputOrHex="HexValue"/outputOrHex="HexValue" → 指定した16進表記のバイト配列と OR 演算
- inputAndHex="HexValue"/outputAndHex="HexValue" → 指定した16進表記のバイト配列と AND 演算

#### 符号化のオプションというか、様々なアルゴリズムの一覧(改行コード変換系)

- inputLf/outputLf → 「CrLf」→「Lf」
- inputCrLf/outputCrLf → 「CrLf」→「Lf」

#### 符号化のオプションというか、様々なアルゴリズムの一覧(改行コード追加系)

- AddCrLf="num"/AddLf="num" → 指定したバイト数ごとに改行コードを挿入する。一行何文字とかに整形するのに使えるかも

#### 符号化のオプションというか、様々なアルゴリズムの一覧(LanManHashEncode)

7Byteずつ LanManHash にして出力する
よって、エンコーダーはあるが、デコーダーはない

#### 符号化のオプションというか、様々なアルゴリズムの一覧(HTTP Chunk)

HTTP の Keep-Alieve 時のチャンクエンコーディングっぽく符号化する

- HttpChunkdecode
- HttpChunkencode=("num")|("min"-"max")[%2c"RandomizeOption"]

乱数アルゴリズムを指定して、ランダムな塊にしてしまう

#### 符号化のオプションというか、様々なアルゴリズムの一覧(X-CGI-Form-Encoded)

HTTP の POST の「値」にデータを埋め込む

- WebFormdecode
- WebFormencode=[(Name|Value)%3d("num")|("min"-"max")[%2c"RandomizeOption"]%26[Cha
rRandom%3d"RandomizeOption"]%26[CharList%3d"string(1moreURLEncode)"]%26[NameEnco
ding%3d"charSet"]

"名前" の文字コードや、"名前" として使う文字配列や長さ、データの塊の長さなどを乱数アルゴリズムを指定して、ランダムにすることができる

#### 符号化のオプションというか、様々なアルゴリズムの一覧(Shino Encode)

データを ShinoEncode する
0-15(4Bit)を単語の文字数に割り当てた符号化方式
実際には、x だけ下駄を履かせる(0文字の単語ってないからね)

- Shinodecode(=<<Original>>)
- Shinoencode(=%26[VocabDicFile%3d<<VocabDictionaryFile>>]%26[VocabRandom%3d"Rando
mizeOption"%26[NoiseRandom%3d"NoReplaceRatio%2cRandomizeOption"%26[CaseRandom%3d
"nor/Case/CASE"%2cRandomizeOption"%26[SymbolRandom%3d"RandomizeOption"%26[Symbol
DicFile%3d<<SymbolDictionaryFile(Derim is Space(x20))>>

詳細は別に章を設けた方がいいかな。

#### 符号化のオプションというか、様々なアルゴリズムの一覧(Stroke Encode)

0-15(4Bit)を漢字の画数に割り当てた符号化方式
しかし、実際には、辞書依存なんだな。

- Strokedecode(=[CharSet%3d"CharSetName"
- Strokeencode(=%26[VocabDicFile%3d<<VocabDictionaryFile>>]%26[VocabRandom%3d"Rand
omizeOption"%26[NoiseRandom%3d"NoReplaceRatio%2cRandomizeOption"%26[CharSet%3d"C
harSetName"

---
### 目次へ戻る

[目次というか最初の一歩](http://qiita.com/tomoki0sanaki/items/85f20cbe18378e33cd6f)