日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

在控制台读取用户输入密码,你会么?

發布時間:2024/8/23 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在控制台读取用户输入密码,你会么? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

客官請聽題,請寫一段代碼從控制臺上讀取用戶輸入密碼。不過有幾點在實現的時候需要特別注意:

1. 最基本的是用戶輸入的不應該直接明文顯示出來,需要用特殊字符顯示。

2. 不要用明文儲存用戶輸入的密碼。

3. 要考慮到一些特殊按鍵的輸入。

自己寫寫試試看?

?

下面是我的實現:

private SecureString ReadPassword(){ConsoleKeyInfo key;SecureString password = new SecureString();key = Console.ReadKey(true);while (key.Key != ConsoleKey.Enter){//如果用戶退格需要將最后一個字符在界面上和字符串里同時刪除if (key.Key == ConsoleKey.Backspace){if (password.Length > 0){password.RemoveAt(password.Length - 1);//利用控制字符\b退格,但是退格是不會刪除最后一個字符的,用空格覆蓋了最后一個字符。 Console.Write("\b \b");}}//忽略特殊控制字符,比如說tab, esc等else if (key.KeyChar >= 32 && key.KeyChar <= 126){password.AppendChar(key.KeyChar);Console.Write("*");}key = Console.ReadKey(true);}Console.WriteLine();password.MakeReadOnly();return password;} View Code

?

關于SecureString

看代碼大概都能理解了,我想說的其實是關于SecureString這個類。之前沒有接觸過這個類,只知道存敏感信息的時候應該用這個類而不是直接用String去儲存。

我們為什么要用SecureString去存敏感信息,為什么不直接用String?

  • SecureString中的數據會固定在內存中,不會隨著GC的發生而挪動位置,這樣就防止了敏感信息在內存有多處的拷貝。而對于String來說它是不會固定在內存中的,也就是說很可能它會被GC多次移動從而在內存中存在多分拷貝。
  • 相比較String,SecureString不是以明文的形式儲存在內存中的而是使用了DPAPI[1]進行加密。即使你的內存被交換到了頁交換文件中也不會以明文的形式存在。SecueString使用用戶的一些信息進行加密(登錄的session,進程等信息)[2],這也就意味著如果你的程序出問題了你可以放心的將dump發給你的服務商而不必擔心他們會看到你的儲存在字符串中的敏感信息。
  • String是不可變的,這也就意味著當你修改信息的時候同時會有新舊兩個版本的信息存在于內存中。而SecureString沒有這個問題。
  • 另外由于String是不可變的,那么當不需要使用的時候清理起來也比較麻煩。SecureString可以在不使用的情況下將內存置為0來保護數據。

使用SecureString就絕對安全么?

當然不是,世上沒有絕對安全這種事情,SecureString只是通過上面這幾點增加了獲取敏感信息的難度。如果說有人能夠訪問你的進程內存,他就有辦法獲得SecureString的內存,既然都到了這一步了應該就有辦法有能力去破解了我覺得(我是不會的)。他也可以等待程序啥時候將敏感信息解析為明文的時候獲取。

總結:

  • 在涉及到一些敏感信息的時候應該盡可能的使用SecureString來儲存數據,當然敏感信息的儲存方式就是另一個話題了。
  • 我覺得微軟可以考慮給Console提供一個讀取加密信息的接口,類似于 public static SecureString ReadSecureString。
  • 關于SecureString還有很多其他的內容,以后慢慢研究。

?

閱讀資料:

Windows Data Protection, http://msdn.microsoft.com/en-us/library/ms995355.aspx

引用:

[1]:? Making Strings More Secure, http://blogs.msdn.com/b/shawnfa/archive/2004/05/27/143254.aspx#144606

[2]: SecureString Redux, ?http://blogs.msdn.com/b/shawnfa/archive/2006/11/01/securestring-redux.aspx

轉載于:https://www.cnblogs.com/imjustice/p/Read_Password_in_Console.html

總結

以上是生活随笔為你收集整理的在控制台读取用户输入密码,你会么?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。