為什麼儲存密碼字元陣列比字串更合適?
http://www.importnew.com/6430.html
字元陣列和字串都可以用於儲存文字資料,但是在選擇具體哪一種時,如果你沒有針對具體的情況是很難回答這個問題的。但是如果說任何與字串相關的問題一定可以從字串的屬性裡面的線索中找到,比如不可變性。
這裡我們就來探討一些關於為什麼你應該使用char[] 來儲存密碼而不是字串。
1. 因為字串是不可變物件,如果作為普通文字儲存密碼,那麼它會一直存在記憶體中直至被垃圾收集器回收。因為字串從字串池中取出的(如果池中有該字串就直接從池中獲取,否則new 一個出來,然後把它放入池中),這樣有很大的機會長期保留在記憶體中,這樣會引發安全問題。因為任何可以訪問記憶體的人能以明碼的方式把密碼dump出來。另外你還應該始終以加密而不是普通的文字來表示密碼。因為字串是不可變,因此沒有任何方法可以改變其內容,任何改變都將產生一個新的字串,而如果使用char[],你就可以設定所有的元素為空或者為零(這裡作者的意思是說,讓認證完後該陣列不再使用了,就可以用零或者null覆蓋原來的密碼,防止別人從記憶體中dump出來)。所以儲存密碼用字元陣列可以明顯的減輕密碼被盜的危險。
2. Java官方本身也推薦字元陣列,JpasswordField的方法getPassword()就是返回一個字元陣列,而由於安全原因getText()方法是被廢棄掉的,因為它返回一個純文字字串。跟隨Java 團隊的步伐吧,沒有錯。
3. 字串以普通文字列印在在log檔案或控制檯中也易引起危險,但是如果使用陣列你不能列印陣列的內容,而是它的記憶體地址。儘管這不是它的真正原因,但仍值得注意。
String strPassword="Unknown";
char[] charPassword= new char[]{'U','n','k','w','o','n'};
System.out.println("String password: " + strPassword);
System.out.println("Character password: " + charPassword);
String password: Unknown
Character password: [C@110b053
以上所有就是為什麼字元陣列比字串儲存密碼要好的原因,儘管使用char[]還不足以安全。我同樣建議你用hash或者密碼加密代替普通文字,而且一旦認證完成儘可能快的把他清除掉。相關文章
- 字元陣列與字串字元陣列字串
- 為什麼處理排序陣列比未排序陣列快排序陣列
- 為什麼處理有序陣列比無序陣列快?陣列
- Java如何將字串轉換為字元陣列?Java字串字元陣列
- 分支預測:為什麼有序陣列比無序陣列快?陣列
- [譯] JavaScript 是如何工作的:對比 WebAssembly + 為什麼在某些場景下它比 JavaScript 更合適JavaScriptWeb
- 字串指標與字元陣列 (轉)字串指標字元陣列
- Ruby小記--字串轉字元陣列字串字元陣列
- 【MySQL】varbinary 真的比varchar 更合適?MySql
- 為什麼要用儲存過程儲存過程
- MySQL中陣列的儲存MySql陣列
- js使用指定字元將字串分割生成陣列JS字元字串陣列
- JavaScript 字串轉換為陣列JavaScript字串陣列
- 網頁密碼儲存網頁密碼
- 將字串陣列轉換為浮點數陣列字串陣列
- 儲存使用者密碼應該使用什麼加密演算法?密碼加密演算法
- 獲取C/C++字串、字元陣列長度C++字串字元陣列
- js將陣列轉字元,字元轉回陣列JS陣列字元
- 什麼是YottaChain儲存,為什麼說是未來資料儲存的趨勢?AI
- 為什麼迴圈佇列要浪費一個儲存空間佇列
- win10 mstsc怎麼儲存遠端密碼_win10 mstsc如何儲存遠端密碼Win10密碼
- 為什麼?為什麼?Java處理排序後的陣列比沒有排序的快?想過沒有?Java排序陣列
- 為什麼還要記密碼密碼
- 密碼為什麼明文存放密碼
- javascript將字串轉換為陣列程式碼例項JavaScript字串陣列
- 字元型別的字元儲存與位元組儲存字元型別
- json字串 轉換為陣列JSON字串陣列
- JavaScript將陣列轉換為字串JavaScript陣列字串
- Join方法把陣列轉為字串陣列字串
- 清除SVN儲存的密碼密碼
- 如何安全的儲存密碼密碼
- C語言中strlen求字串長度,求字元陣列長度(空字元,數字0,字元0,陣列部分初始化)C語言字串字元陣列
- 小程式 - 陣列追加兼本地儲存陣列
- oracle儲存過程中的陣列Oracle儲存過程陣列
- Rust與Java程式碼比較:將二維陣列轉為三維陣列RustJava陣列
- js將陣列元素轉換為字串程式碼例項JS陣列字串
- 為什麼ElasticSearch比MySQL更適合全文索引ElasticsearchMySql索引
- 為什麼說rollup比webpack更適合打包庫Web