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
Copyright © 2011-2022 走看看