0

始める前に、stackoverflow に同様の質問がたくさんあることは知っていますが、回答の大部分はコードの大きなセクションで構成されており、ユーザーを支援するための説明やヘルプはありません。

私がする必要があるのはかなり単純です。ユーザーからの入力として文字列を取得し、次にパスワードを取得し、パスワードで文字列を暗号化し、暗号テキストをファイルに書き込みます。その後、後日、ユーザーが希望するときに、ファイルから暗号文を読み取り、復号化して、元の平文をユーザーに提示します。ファイルへの書き込みやファイルからの書き込みは処理できますが、文字列の暗号化については助けが必要です。(注:ファイル全体を暗号化/復号化したくありません-暗号化されていないものを含める必要があるため-プログラム内の文字列だけです)

また、必要な「初期化ベクトル」 - パスワードと同じにすることはできますか? それとも、単にプログラムにハードコーディングできますか? セキュリティのためにも不可欠ですか?そうでない場合、ユーザーはパスワードと IV を覚えておく必要がありますか?

もう 1 つは、ユーザーが暗号化を解除しようとして間違ったパスワードを入力した場合、Rijndael クラスのメソッドがエラーを発生させるだけでしょうか?

C#に関しては熟達していますが、暗号化は初めてなので、投稿したコードや回答を教えていただければ幸いです。

ありがとう

4

2 に答える 2

2

IV はほとんどの Rijndael モードで必要です。通常は暗号文の前に追加するだけで、ユーザーが覚えておく必要はありません。

ユーザーが入力したパスワードを使用して復号化しているため、間違ったパスワードが入力された場合にプログラムが安全に再プロンプトを表示できるように、認証済み暗号化を使用する必要があります。そうしないと、プログラムが問題があったことを示しず、ランダムなテキストを吐き出す可能性があります。 .

HMAC-SHA256認証でAES-CBCを使用する例があり、最新の状態に保ち、レビューしました。実際には、プレーンテキストとパスワードだけで暗号化を処理するヘルパーメソッドがあり、よくコメントされています:

文字列の対称認証暗号化の最新の例。C#

于 2013-02-27T21:28:47.380 に答える
1

次の手順を実行する必要があります。

  1. パスワードからキーを計算します。PBKDF2 などのパスワード ベースのキー派生関数 (PBKDF) の入力として、8 バイトのランダム ソルトと反復カウントを生成する必要があります。
  2. UTF-8 などの任意のエンコーディングを使用して文字列をエンコードし、暗号の平文を提供します。
  3. PKCS#7 パディングを使用して、CBC モードの AES-128 などの暗号を作成します。
  4. ランダムな IV を作成します。これはバイト単位のブロックサイズである必要があります (したがって、AES の場合、これは 16 バイトになります)。
  5. 指定された暗号を使用して平文を暗号化し、暗号文を取得します。
  6. ソルト、IV、および暗号文を保存します。文字列が必要な場合は、Base64 などのエンコーディングを使用できます。

PBKDF2 は に実装されていRfc2898DeriveBytesます。

この回答は、完全性や信頼性ではなく、機密性を達成する方法のみを示していることに注意してください。

于 2013-02-27T21:28:40.523 に答える