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を使っている。