独自の数値システムを作成する方法は?
-
05-07-2019 - |
質問
問題は、最新のアンマネージ言語、Cライクな言語、デルファイ、その他すべてのものです。
他とは異なり、暗号化された文字列の長さを減らす独自の暗号化アルゴリズムを作成したい。
最初に考えたのは、16進数に似た独自の数値システムを作成することでしたが、たとえば[0..9] + [A..Z]などの文字を追加しました。 「!、。/?)(#!」など、他の数字を追加することもできます。
私の質問は、0から9を含むAからZまでのそのような数値システムを実装する方法です。すべての単一の値を0xZZZZZZZZまでの定数として宣言する必要がありますか?それは私の人生を恐ろしくします
提案、例を教えてください。 :)
解決
これについて考えましょう。
各Base 40文字は8ビットを占有します。 0〜39の数値をエンコードします。これは、実際の情報の5ビット以上の単なる髪です。
1バイトは256の異なる値を表すことができます。ベース40エンコーディングは、同じバイト内の40個の異なる値のみを表します。
これは、エンコードされたバイトあたり2〜3ビットのネット loss のようです。
とはいえ、ベース40の値は文字列であり、それ以上ではありません。派手なデータベース宣言は必要ありません-それは単なる文字列です。
base40文字列を通常の文字列に変換する2つの関数toBase40(someBytes)とtoBytes(someBase40string)を作成します。
よくできた既存のソリューションが必要な場合は、 base64 を調査してください。
他のヒント
コンピューターとストレージの動作方法を変更する必要があります。
空きメモリがなく、空き領域を確保する方法がありません。番号システムを変更すると、紙に書くときにより多くのスペースが与えられますが、コンピューターのメモリでは、同じ量のビットが必要です。
また、何かを暗号化する場合、暗号化されたコンテンツは可能な限りランダムに近い必要があるため、その操作によって意味のある圧縮も妨げられることに注意してください。
通常、何らかの形式の圧縮は暗号化(GZipまたは類似のもの)の前に行われますが、番号システムを変更しても機能しません。
PS実績のある暗号化アルゴリズムを使用します。
通常、暗号化アルゴリズムが暗号化されたテキストのサイズを縮小する方法は、最初に汎用圧縮アルゴリズムを介してテキストを実行し、次に圧縮結果を暗号化することです。ほとんどの場合、2つのアルゴリズムを1つに組み合わせようとするよりも、この方法でより良い結果が得られます。
暗号化アルゴリズムを開発した人々は、専門知識を得るために、おそらく何百万時間、何年も大学院やポスドクで過ごしました。何か良いものを思いつくことができると思うのはなぜですか?
おそらく安全でないアルゴリズムを思い付くでしょう。
既存のアルゴリズムを使用し、圧縮を使用します。
入力を暗号化する前に(gzip、zlibなどを使用して)単純に圧縮することをお勧めします。これは、独自のアルゴリズムを作成するよりも簡単で安全です。 (たとえば、GnuPGがこれを行います。)
Base64文字列は多くのコンピューター言語で一般的であり、かなり標準的です。次の文字を使用します。
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 + /
詳細については、 http://en.wikipedia.org/wiki/Base64 をご覧ください。