SecureString

いまいち使いどころがわからないSecureString
メモリ上にずっとパスワードを保持しないといけない場合に使うのだろうか。

でもstringに変換しないと使えない(他のIFへパスワードを渡す)場合は意味あるの?
とりあえず使い終わったstringには空文字でも入れておけばいいのか??
よくわからん。

とりあえずセキュリティー考えてますとかアピールくらいの材料にはなるかも
専門家とかに突っ込まれるとめんどくさいけど。

SecureStringからString

static string SecureStringToString( SecureString secureString ) {
	var pointer = IntPtr.Zero;

	try {
		var buffer = new char[secureString.Length];

		pointer = Marshal.SecureStringToCoTaskMemUnicode( secureString );
		Marshal.Copy( pointer, buffer, 0, buffer.Length );

		return new string( buffer );
	} finally {
		if ( pointer != IntPtr.Zero ) {
			Marshal.ZeroFreeCoTaskMemUnicode( pointer );
		}
	}
}

stringからSecureString

static SecureString StringToSecureString( string source ) {
	var secureString = new SecureString();
	Array.ForEach( source.ToArray(), c => secureString.AppendChar( c ) );
	return secureString;
}