亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么char []比字符串更適合密碼?

為什么char []比字符串更適合密碼?

為什么char []比字符串更適合密碼?在Swing中,密碼字段具有getPassword()(返回char[])方法而不是通常getText()(返回String)方法。同樣,我遇到了一個不使用String來處理密碼的建議。String在密碼方面,為什么會對安全構成威脅?使用感覺不方便char[]。
查看完整描述

4 回答

?
忽然笑

TA貢獻1806條經驗 獲得超5個贊

雖然這里的其他建議似乎有效,但還有另一個好的理由。簡單地說,String你不小心將密碼打印到日志,監視器或其他一些不安全的地方。char[]不那么脆弱了。


考慮一下:


public static void main(String[] args) {

    Object pw = "Password";

    System.out.println("String: " + pw);


    pw = "Password".toCharArray();

    System.out.println("Array: " + pw);

}

打印:


String: Password

Array: [C@5829428e


查看完整回答
反對 回復 2019-05-27
?
白板的微信

TA貢獻1883條經驗 獲得超3個贊

引用官方文檔時,Java Cryptography Architecture指南說明了這char[]String密碼(關于基于密碼的加密,但當然更常見的是關于密碼):

在類型的對象中收集和存儲密碼似乎是合乎邏輯的java.lang.String。但是,這里有一點需要注意:Object類型的s String是不可變的,即沒有定義的方法允許你改變(覆蓋)或清除String 后用法的內容。此功能使String對象不適合存儲安全敏感信息,如用戶密碼。您應該始終在char數組中收集和存儲安全敏感信息 。

Java編程語言安全編碼指南的準則2-2,版本4.0也說了類似的東西(雖然它最初是在日志記錄的上下文中):

準則2-2:不要記錄高度敏感的信息

某些信息(如社會安全號碼(SSN)和密碼)非常敏感。即使是管理員,也不應將此信息保存的時間超過必要的時間,也不應保存在何處。例如,它不應該發送到日志文件,并且不應通過搜索檢測到它的存在。一些瞬態數據可以保存在可變數據結構中,例如char數組,并在使用后立即清除。清除數據結構降低了典型Java運行時系統的有效性,因為對象在內存中透明地移動到程序員。

本指南還對低級庫的實現和使用有影響,這些低級庫沒有他們正在處理的數據的語義知識。例如,低級字符串解析庫可以記錄它所處理的文本。應用程序可以使用庫解析SSN。這會產生一種情況,即管理員可以使用SSN訪問日志文件。


查看完整回答
反對 回復 2019-05-27
?
HUX布斯

TA貢獻1876條經驗 獲得超6個贊

char[]通過將每個字符設置為零而不將字符串設置為零,可以在使用后清除字符數組()。如果某人可以以某種方式查看內存映像,如果使用字符串,他們可以以純文本形式查看密碼,但如果char[]使用,則在使用0清除數據后,密碼是安全的。


查看完整回答
反對 回復 2019-05-27
  • 4 回答
  • 0 關注
  • 1608 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號