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);
}
}
}
}
查看全文
相关阅读:
javascript中!=、!==、==、===操作符总结
轮询、长轮询与Web Socket的前端实现
C#中Enum用法小结
浅谈Javascript 中几种克隆(clone)方式
JS数组sort比较函数
为Jquery类和Jquery对象扩展方法
自定义滚动条mCustomScrollbar
T-SQL 控制流语句
sql case 用法总结
Selenium2+python自动化19-单选框和复选框(radiobox、checkbox)【转载】
原文地址:https://www.cnblogs.com/flaaash/p/1197324.html
最新文章
git操作远程仓库
git操作本地仓库基本使用教程
LinkedHashMap实现LRU缓存算法
windows上git安装
jira7.3.6添加导出excel的按钮
修改mysql的用户root密码
linux查看防火墙的状态以及开启关闭
Java类的5个加载步骤
Synchronized和lock的区别和用法
交叉编译python2.7.7
热门文章
LWP::UserAgent的用法
测试SD卡读写速度
ln: operation not permitted
交叉编译libudev
declare -A color
awk参数解析
Linux系统不能解析域名
Linux系统声卡问题
jira与svn的调研
虎记:强大的nth-child(n)伪类选择器玩法
Copyright © 2011-2022 走看看