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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

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

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

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

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

自己寫寫試試看?

?

下面是我的實(shí)現(xiàn):

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

?

關(guān)于SecureString

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

我們?yōu)槭裁匆肧ecureString去存敏感信息,為什么不直接用String?

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

使用SecureString就絕對安全么?

當(dāng)然不是,世上沒有絕對安全這種事情,SecureString只是通過上面這幾點(diǎn)增加了獲取敏感信息的難度。如果說有人能夠訪問你的進(jìn)程內(nèi)存,他就有辦法獲得SecureString的內(nèi)存,既然都到了這一步了應(yīng)該就有辦法有能力去破解了我覺得(我是不會的)。他也可以等待程序啥時候?qū)⒚舾行畔⒔馕鰹槊魑牡臅r候獲取。

總結(jié):

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

?

閱讀資料:

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

轉(zhuǎn)載于:https://www.cnblogs.com/imjustice/p/Read_Password_in_Console.html

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。