これをワンライナーに単純化できますか? secureString が適切に初期化される限り、自由に完全に書き直してください。
SecureString secureString = new SecureString ();
foreach (char c in "fizzbuzz".ToCharArray())
{
secureString.AppendChar (c);
}
これをワンライナーに単純化できますか? secureString が適切に初期化される限り、自由に完全に書き直してください。
SecureString secureString = new SecureString ();
foreach (char c in "fizzbuzz".ToCharArray())
{
secureString.AppendChar (c);
}
Linq を使用できます。
"fizzbuzz".ToCharArray().ToList().ForEach(p => secureString.AppendChar(p));
安全でないコードと を使用する以外にchar*
、(はるかに) 良い方法はありません。
ここでのポイントは、SecureString の内容を通常の文字列との間でコピーしないことです。一定の"fizzbuzz"
定数は、ここでのセキュリティ リークです。
ラムダをメソッドグループに置き換えるSaschaの回答のわずかな改善
"fizzbuzz".ToCharArray().ToList().ForEach(ss.AppendChar);
var s = "fizzbuzz".Aggregate(new SecureString(), (ss, c) => { ss.AppendChar(c); return ss; });
インターフェイスSecureString
を利用しているため。IDispose
あなたは実際にこのようにすることができます。
SecureString secure = new SecureString();
foreach(var character in data.ToCharArray())
secure.AppendChar(character);
基本的に、data
はパラメーターになります。
using
リソースを軽減するためにを利用する場合。スコープに注意する必要があります。しかし、使い方によっては、これが有益な代替手段になる場合があります。
アップデート:
実際に完全なメソッド署名を行うことができます:
public static SecureString ConvertStringToSecureString(this string data)
{
var secure = new SecureString();
foreach(var character in data.ToCharArray())
secure.AppendChar(character);
secure.MakeReadOnly();
return secure;
}
あなたがしたい復号化のために:
public static string ConvertSecureStringToString(this SecureString data)
{
var pointer = IntPtr.Zero;
try
{
pointer = Marshal.SecureStringToGlobalAllocUnicode(data);
return Marshal.PtrToStringUni(pointer);
}
finally
{
Marshal.ZeroFreeGlobalAllocUnicode(pointer);
}
}
次の記事では、いくつかの追加情報も提供します。