あなたのコメントを読んだ後、それはより合理的に聞こえます。このようなメガバイトのデータをエンコードするつもりなのかどうか、私にはわかりませんでした。
オリバーの提案に沿って、ベーコンの暗号からページを借用してデータ密度を高めることをお勧めします。刑務所のギャングは、2つの異なるスクリプトスタイルで書かれたミシブで隠されたメッセージをエンコードするためによく使用します-通常は、小文字または印刷物と筆記体の文字、例えば
Hey mOM, WHAT's FOR diNNeR TODAY? = ABBBA AAAAA BAAAB BAABA AAAAA
= P A S T A
ただし、目標はステグノグラフィではないため、これを使用してグリフセットを拡張するだけです。これを行うと、印刷および筆記体の英数字を使用して最大114個のグリフ、または二重文字エンコードを使用して12996個のコードポイントを作成できます。
ただし、15を超え256未満のすべてのグリフカウントはバイナリデータのストレート暗号では本質的に同じであるため(つまり、各バイトを表すには2文字が必要であり、1文字あたり4ビットのデータ密度が得られます)すべてのケース)、追加の98グリフ/ 12740コードポイントをエラー検出/修正に使用できます。
これを行う方法は次のとおりです。
- 256の最も簡単な読み取り/書き込み文字コンボのセットを選択します。他の文字コンボが発生した場合、それはコピーエラーであることがわかります。
- 2つのバージョンの終了文字をパリティビットとして使用します。
50種類の16文字のグリフセットを作成します。その後、それらを使用してエラー訂正データを暗号エンコードできます。
たとえば{set 1}{set 1}
、次の3つのニブルが等しい0x000
、{set 1}{set 2}
等しい0x001
、などを意味します。
これを使用して、4096個の可能な1.5バイト値のうち2500個以上を表すことができます。同様に、16セットだけを使用して次のバイトのすべての値を表すことができ、エンコードされたデータの長さを増やすことなく100%の冗長性が得られます。
または、追加の圧縮に追加のグリフを使用できます。
- 98個の単一文字コードポイントを選択して、可変幅エンコーディングを実装します。これにより、エンコードされたコンテンツの平均サイズが約20%削減されます。
- 異なるグリフセットまたはグリフセットの組み合わせを使用して、反復ニブル/バイトを表すことにより、ランレングスエンコーディングに似たものを実装します。例えば
Ab
= aba
; aB
= abab
; AB
= ababab
...
- 余分なグリフまたはコードポイントを使用して、データ内で繰り返される「単語」と「フレーズ」を表します。事前に圧縮されたデータは高レベルのエントロピーを持つ可能性が高いので、これがどれほど効果的かはわかりません。
コピーエラーをさらに減らすには、エンコードされたコンテンツをグリッドラインに表示し、グラフ用紙にコピーします。列/行の色が交互に変わるカスタムステーショナリー、または文字列と番号付き行のチェス盤スタイルのチェッカーグリッドを使用してすばやく検索できる場合、コピーの精度がさらに向上します。
エラー検出の簡単な形式として、交互のグリッドレイアウトと交互の文字スタイルを組み合わせることもできます。すなわち、奇数列が常に大文字である場合、トランスクライバが奇数列に小文字を書いていることに気付いた場合、彼らはエラーを犯したことを知り、それがどこで起こったのかを追跡することができます。
あなたの主な優先事項が精度である場合、バイナリエンコーディング+
ハミングコードを使用し
ます。標準のグラフ用紙で(12、8)短縮ハミングコードを使用すると、187バイトのみに適合し、124バイトのデータのみをエンコードできます。しかし、それは非常に迅速に転写され(1の場合はスラッシュ、0の場合は何もない)、単一のエラー修正を提供することができます。追加のパリティビット(13、8)をタックすると、SECDED(単一エラー訂正、二重エラー検出)が提供されます。(15、11)や(31、26)のような標準のハミングコードを使用すると、シートごとにそれぞれ137バイトと156バイトのデータで効率がさらに向上します。転写器の精度に応じて、さらに高いコードレートを実現できます。
また、バイナリエンコーディングは読みやすく(大声で)およびOCR / OMRになります。