これを暗号化に使用しています: http://msdn.microsoft.com/en-us/library/system.security.cryptography.rijndaelmanaged.aspx
暗号化されたテキストがどのようになるかを予測する方法はありますか? 暗号化された出力をテキストに変換しているので、データベースに保存できます。
データベース列のサイズが十分に大きいことを確認したいだけです。
テキスト入力を 20 文字に制限しています。
これを暗号化に使用しています: http://msdn.microsoft.com/en-us/library/system.security.cryptography.rijndaelmanaged.aspx
暗号化されたテキストがどのようになるかを予測する方法はありますか? 暗号化された出力をテキストに変換しているので、データベースに保存できます。
データベース列のサイズが十分に大きいことを確認したいだけです。
テキスト入力を 20 文字に制限しています。
SQL Server 2005 以降を使用していますか? その場合は、列タイプにVARCHAR(MAX)
orを使用できます。NVARCHAR(MAX)
もう少し細かくするなら…
の最大ブロック サイズRijndaelManaged
は 256 ビット (32 バイト) です。
最大入力サイズは 20 文字であるため、1 文字あたり 4 バイトという最悪のシナリオを想定しても、それは 80 バイトに過ぎず、暗号化プロセスのために最大 96 バイトまでパディングされます。
暗号化された出力で Base64 エンコーディングを使用すると、暗号化された 96 バイトから 128 文字が作成されます。16 進エンコーディングを使用すると、暗号化された 96 バイトから 192 文字が作成されます (さらに、16 進文字列の前に "0x" を付ける場合は、さらにいくつかの文字が追加される可能性があります)。いずれの場合も、列幅が 200 文字あれば十分な余裕があります。
(注: これらは私の思いつきの計算です。実際に正しいかどうかは確認していません!)
オンラインで情報が見つからない未知の暗号化アルゴリズムの場合、最大長の文字列のランダムなセットを暗号化する小さなテスト プログラムを作成し、出力で最長の長さを見つけてから、暗号化の可能性に基づいて安全係数を掛けます。入力の長さを変更すること、およびテスト プログラムの結果がどれほど正確であったか。
ただし、一般的に言えば、おそらく 1.5x ~ 2x の入力長の範囲になるでしょう。
この特定のアルゴリズムでは、暗号文の長さは次のようになります。
((length+16)/16)*16
これは、ブロック サイズとパディングの要件を満たすためです。
さらに 16 バイトかかるように、ランダムな IV を暗号文に追加することもお勧めします。
ただし、これを char としてデータベースに入れたい場合は、エンコードする必要があります。そうすればさらに増えます。
base64 の場合は、4/3 を掛けます。16 進数の場合は 2 倍にします。
暗号化によって、必要な最小パディングを超えてデータのサイズが増加することはありません。
データを「展開」する場合は、おそらくあまり優れた暗号化アルゴリズムではありません。