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);
                }

            }

        }

    }

  • 相关阅读:
    wing ide 注释
    dn.net/blueheart20/article/details/22080489
    ubuntu安装R时候增加软件源到sources.list,sudo apt-get update不能更新
    ubuntu install oracle jdk
    Rhadoop安装
    有向图tarjan算法求连通分量的粗浅讲解、证明, // hdu1269
    POJ 3080 多个串最长公共子序列
    POJ 3461 kmp 应用
    POJ2752 NEXT[J]特性应用利用。
    HDU 1358字符串循环节问题 ,next数组
  • 原文地址:https://www.cnblogs.com/flaaash/p/1197324.html
Copyright © 2011-2022 走看看