使用
System.Runtime.InteropServices.Marshal类:
String SecureStringToString(SecureString value) { IntPtr valuePtr = IntPtr.Zero; try { valuePtr = Marshal.SecureStringToGlobalAllocUnipre(value); return Marshal.PtrToStringUni(valuePtr); } finally { Marshal.ZeroFreeGlobalAllocUnipre(valuePtr); }}如果要避免创建托管字符串对象,可以使用
Marshal.ReadInt16(IntPtr,Int32)以下命令访问原始数据:
void HandleSecureString(SecureString value) { IntPtr valuePtr = IntPtr.Zero; try { valuePtr = Marshal.SecureStringToGlobalAllocUnipre(value); for (int i=0; i < value.Length; i++) { short unipreChar = Marshal.ReadInt16(valuePtr, i*2); // handle unipreChar } } finally { Marshal.ZeroFreeGlobalAllocUnipre(valuePtr); }}


