/*--===------------------------------------------===---
终于,Snippet Compiler开始支持UNICODE字符编码了。
我亲爱的同学们,可以从下面的地址下载:
http://www.sliver.com/dotnet/SnippetCompiler/
这次我们演示这样一个demo:csc /unsafe register.cs
编写提示用户输入密码的控制台程序,要求考虑安全性。
--===------------------------------------------===---*/
namespace xumh
{
public class Register
{
public static void Main()
{
using(System.Security.SecureString ss = new System.Security.SecureString())
{
System.Console.Write("请输入密码:");
while(true)
{
System.ConsoleKeyInfo cki = System.Console.ReadKey(true);
if(cki.Key == System.ConsoleKey.Enter)
break;
ss.AppendChar(cki.KeyChar);
System.Console.Write("*");
}
System.Console.WriteLine();
//显示输入的密码
DisplaySecureString(ss);
}//using后的SecureString会被销毁
}
//显示密码的方法
private unsafe static void DisplaySecureString(System.Security.SecureString ss)
{
char* p = null;
try
{
//将 SecureString 揭秘到一个非托管内存缓冲区
p = (char*) System.Runtime.InteropServices.Marshal.SecureStringToCoTaskMemUnicode(ss);
for(int i=0; p[i] !=0; i++)
System.Console.Write(p[i]);
}
finally
{
if(p != null)//确保清楚并释放已解密SecureString字符的非托管内存缓冲区
System.Runtime.InteropServices.Marshal.ZeroFreeCoTaskMemUnicode((System.IntPtr) p);
}
}
}
}
终于,Snippet Compiler开始支持UNICODE字符编码了。
我亲爱的同学们,可以从下面的地址下载:
http://www.sliver.com/dotnet/SnippetCompiler/
这次我们演示这样一个demo:csc /unsafe register.cs
编写提示用户输入密码的控制台程序,要求考虑安全性。
--===------------------------------------------===---*/
namespace xumh
{
public class Register
{
public static void Main()
{
using(System.Security.SecureString ss = new System.Security.SecureString())
{
System.Console.Write("请输入密码:");
while(true)
{
System.ConsoleKeyInfo cki = System.Console.ReadKey(true);
if(cki.Key == System.ConsoleKey.Enter)
break;
ss.AppendChar(cki.KeyChar);
System.Console.Write("*");
}
System.Console.WriteLine();
//显示输入的密码
DisplaySecureString(ss);
}//using后的SecureString会被销毁
}
//显示密码的方法
private unsafe static void DisplaySecureString(System.Security.SecureString ss)
{
char* p = null;
try
{
//将 SecureString 揭秘到一个非托管内存缓冲区
p = (char*) System.Runtime.InteropServices.Marshal.SecureStringToCoTaskMemUnicode(ss);
for(int i=0; p[i] !=0; i++)
System.Console.Write(p[i]);
}
finally
{
if(p != null)//确保清楚并释放已解密SecureString字符的非托管内存缓冲区
System.Runtime.InteropServices.Marshal.ZeroFreeCoTaskMemUnicode((System.IntPtr) p);
}
}
}
}