SecureString型を使ってみた

SecureString型がMonoTouchでも使えるかどうか検証してみた。

using System.Security;
using System.Runtime.InteropServices;


SecureString ss = new SecureString();
foreach (var v in "ABCDFG")
{
  ss.AppendChar(v);
}
ss.MakeReadOnly();
IntPtr ssPtr = IntPtr.Zero;
try
{
  ssPtr = Marshal.SecureStringToBSTR(ss);
  string s = Marshal.PtrToStringUni(ssPtr);
  // なにかしらの処理
  // Console.WriteLine(s);
}
finally
{
  if (ssPtr != IntPtr.Zero)
    Marshal.ZeroFreeBSTR(ssPtr);
}
ss.Dispose();


ポインタからString型に変換するときにMarshal.PtrToStringBSTRを使うサンプルが多い。しかしMonoTouch 5.2.5とMono framework 2.10.6の組み合わせでは実機で実行するときにMarshal.PtrToStringBSTRが見つからない旨の例外が発生する。よってこのサンプルではMarshal.PtrToStringUniを使っている。