zoukankan
html css js c++ java
安全的获取输入的密码基于非托管缓冲区
/**/
/*
--===------------------------------------------===---
终于,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);
}
}
}
}
查看全文
相关阅读:
软件包的作用
Sqlserver2008 表分区教程
C#通用类型转换 Convert.ChangeType
缓存 HttpContext.Current.Cache和HttpRuntime.Cache的区别
用户信息 Froms验证票证
.NET4.0 __doPostBack未定义
TFS2012 安装 配置笔记
MVC学习笔记一
新博客..第一天..
ORACLE多表查询优化
原文地址:https://www.cnblogs.com/flaaash/p/1197324.html
最新文章
CSS矩形盒子的四个边界
烂泥:小灵呼语音系统迁移
烂泥:【解决】virtualbox启动报创建COM对象失败错误
spring mvc 快速入门
开源报表(js)
08day03
Python 面向对象(初级篇)
剑指offer 面试题5 : 从尾到头打印链表
反射
Foreach与迭代器
热门文章
剑指offer 面试题16 反转链表
算法时间复杂度计算
常见异常类(转载)
Windy数
[JSOI2008]最大数
android shell常用命令
写代码时要注意的问题
Android完全退出activity
Android系统结构
samba服务和nginx服务
Copyright © 2011-2022 走看看