1

Aes.Key を secureString に変換するにはどうすればよいですか? byte[] -> string -> securestring を実行しています。私は別の問題に直面しています。キーをバイト[]で文字列に変換し、バイト[]に戻すと、別のバイト[]が得られます。コードの問題は何ですか?

Aes aes = Aes.Create();
aes.GenerateIV();
aes.GenerateKey();

byte[] byteKey1 = aes.Key; 

string sKey = Encoding.UniCode.GetString(byteKey);
byte[] byteKey2= Encoding.UniCode.GetBytes(sKey);

「byteKey1」と「byteKey2」が異なる場合があります。Encoding.Default を使用する場合は同じですが、マシンごとにデフォルトのエンコーディングが異なる場合に問題が発生します。

byte[] の Key を SecureString に変換し、 byte[] に戻すにはどうすればよいですか?

ありがとう。

4

1 に答える 1

7

暗号化キーや暗号文などのバイナリ データには、テキスト エンコーディング (Unicode や ASCII など) を使用しないでください。エンコーディングはテキスト表現を目的としており、実装によって、エンコーディングで許可されているようにバイナリ コンテンツを変更できます。

代わりに、 と を使用Convert.ToBase64StringConvert.FromBase64Stringて、バイナリ テキストをテキスト形式でエンコードできる形式に変換します。

次のコードは説明byteKey2し、byteKey同じになります。

string sKey = Convert.ToBase64String(byteKey);
byte[] byteKey2= Convert.FromBase64String(sKey);
bool equal = byteKey.SequenceEqual(byteKey2); // will be true
于 2014-06-15T04:56:16.477 に答える