0

組み込みの GenerateKey メソッドを使用してランダムなキーを生成し、それを文字列として返す暗号化ヘルパー クラスを実装しようとしています。私が使用しているオブジェクトは次のとおりです。

  • DESCryptoServiceProvider

  • RC2CryptoServiceProvider

  • Rijndaelマネージド

選択したオブジェクトの GenenrateKey メソッドを呼び出した後、キーを返される文字列に変換しようとします。

私の問題は、これで使用されている機能が見られず、他のさまざまなサイトが私が望むように機能しているように見えることです。たとえば、DES 暗号化オブジェクトに対して次の例を実行するとします。

public String GenerateRandomKey()
{
  DESCryptoServiceProvider encryptObject = new DESCryptoServiceProvider();
  encryptObject.Padding = PaddingMode.Zeros;
  encryptObject.GenerateKey();

  string key = 
      Convert.ToBase64String(encryptObject.Key,0,encryptObject.Key.Length); 
  return key;
}

返されるキー文字列の例は A01190NXvPI= で、これは 12 文字ですが、DES には 8 文字の文字列を期待していました。他の暗号化方法も同様に、長すぎるキー文字列を返します。

これはエンコーディングの問題だと確信していましたが、すべて試してみましたが、まだうまくいきません。また、キーバイト配列に存在する可能性のあるパディングまたはリターン文字を削除するロジックを追加しようとしましたが、やはりうまくいきませんでした。

4

1 に答える 1

0

(単一の) DES キーは 56 ビットなので、7 バイトで格納できます。16 進エンコーディングや base64 エンコーディングなど、任意のバイナリ データを String として表す一般的な方法がいくつかあります。どの一般的なエンコード方法でも、元のデータのバイト数よりも多くの文字を含む文字列が作成されます。これは、各文字が 8 ビット未満の情報を運ぶためです。これが望ましくない場合は、バイト配列を文字列に変換して何を達成しようとしているのかを考え直してください。

于 2013-11-05T17:14:54.740 に答える