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);
}
}
}
}
查看全文
相关阅读:
C# 窗体WinForm中动态显示radioButton实例
C#和Java交互相关研究
c# 注册表操作,创建,删除,修改,判断节点是否存在
C#单例模式的三种写法
C#中使用TCP通信
c#中this的用法
C#单例模式的三种写法
二十道经典C#面试题
Linux chattr 命令详解
Linux ulimit命令详解
原文地址:https://www.cnblogs.com/flaaash/p/1197324.html
最新文章
转: 如何选CDN:互联网大直播时代的CDN选择指南
转: 深入浅出看流媒体前世今生,分分钟二逼变牛逼
转: 职场“潜”规则:心法和技法 (其实讲的工作的方法论)
转: 电商交易中支付相关知识
转:国内外著名开源b2c电子商务系统比较包括asp.net和php
from: 关于RabbitMQ
转: 多版本并发控制(MVCC)在分布式系统中的应用 (from coolshell)
转: 构建高并发高可用的电商平台架构实践
Mybatis中的ParameterType
Mybatis${}、#{}及使用#{}时指定jdbcType
热门文章
maven私服客户端配置
spring整合Dubbo
Thrift简单调用
人生不是赛场,理想不容退场
spring整合activeMQ
程序员、架构师、技术总监、CTO
32位JDK和64位JDK
Dubbo与微服务
C# 动态调用WebService
C#使用System.Data.SQLite操作SQLite
Copyright © 2011-2022 走看看