ここに 3 つのステップがあります。まず、データを圧縮してみます。データが非常に少ない場合、bzip2 はおそらく 5 ~ 20% 節約できます。データが大きくならないようにガードを入れます。このステップはあまり価値がないかもしれません。
use Compress::Bzip2 qw(:utilities);
$data = memBzip $data;
データ内のキーと値の長さを手動で短くすることもできます。たとえば、first_name
に減らすことができますfname
。
次に、暗号化します。お気に入りの暗号を選択して、Crypt::CBC を使用します。ここでは Rijndael を使用します。これは、NSA にとって十分なためです。ベンチマークを実行して、パフォーマンスとセキュリティの最適なバランスを見つける必要があります。
use Crypt::CBC;
my $key = "SUPER SEKRET";
my $cipher = Crypt::CBC->new($key, 'Rijndael');
my $encrypted_data = $cipher->encrypt($data);
キーをサーバーに保存する必要があります。保護されたファイルに入れるだけで十分であり、そのファイルを演習として残します。サーバーに何も保存できないと言うとき、これにはキーが含まれていないと思います。
最後に、Base 64 でエンコードします。+ と / の代わりに - と _ を使用する変更された URL セーフな Base 64 を使用すると、Base 64 文字列でこれらの文字を URL エンコードするスペースを費やす必要がなくなります。 MIME::Base64::URLSafeがそれをカバーしています。
use MIME::Base64::URLSafe;
my $safe_data = urlsafe_b64encode($encrypted_data);
次に、必要に応じて URL に貼り付けます。それを読み込むプロセスを逆にします。
あなたはサイズで安全でなければなりません。暗号化するとデータのサイズが増加しますが、おそらく 25% 未満です。Base 64 では、データのサイズが 3 分の 1 増加します (2^8 ではなく 2^6 としてエンコードされます)。これにより、500 バイトのエンコードが 1K 内に快適に収まるはずです。