Javaで200〜500文字の長さの長い文字列を暗号化/難読化された(どちらでも機能します)文字列に暗号化しようとしています。これを後で元の200〜500文字の文字列に復号化できます。問題は、暗号化された文字列を 32 文字以内にする必要があることです (暗号化された文字列がコンソール ラインにうまく収まるようにする必要があります)。誰でもこれを行う方法で私を助けることができます..? あるとしたら?私はしばらく探していましたが、長すぎる文字列を出力するbase64やAESのようなものしか見つかりませんでした..
2 に答える
32 文字の文字列の 200 文字ごとに可逆圧縮を行う方法はありません。それは単に不可能です。
これを理解するための例: ASCII しかないと仮定します:
200 文字、つまり 127^200 を意味する 200 文字の単語
長さ 32 の可能な単語は 127^32 しかありません。したがって、各 200 文字の単語を別の 32 文字の単語に変換する方法は存在しません。これは、バッグを 200 文字の単語に変換できるようにする場合に必要です。 (エラーなし)
数学は、あなたが要求することは不可能だと言っています。
長さ 200 の 256^200 の可能な文字列があります (8 ビットの拡張 ASCII 文字 0 ~ 255 を使用していると仮定します)。サイズ 32 の可能な文字列は 256^32 あります。
これは、任意の 200 文字の文字列を 32 文字の文字列に変換する関数は、必然的に複数の入力文字列を同じ出力文字列に変換することになることを意味します。これは、可能な出力文字列が少なすぎるためです (ピジョンホールの原理を参照)。
入力文字列を 32 文字の出力にマップするハッシュ関数を簡単に思い付くことができますが、複数の文字列が同じ出力にマップされる可能性があるため、出力から入力文字列を取得するプロセスを逆にすることは不可能です。