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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

为什么 char 数组比 String 更适合存储密码?

發(fā)布時間:2025/3/21 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 为什么 char 数组比 String 更适合存储密码? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

另一個基于?String?的棘手 Java 問題,相信我只有很少的 Java 程序員可以正確回答這個問題。

這是一個真正艱難的核心 Java 面試問題,并且需要對?String?的扎實知識才能回答這個問題。

這是最近在?Java 面試中向我的一位朋友詢問的問題。

他正在接受技術(shù)主管職位的面試,并且有超過6年的經(jīng)驗。如果你還沒有遇到過這種情況,那么字符數(shù)組和字符串可以用來存儲文本數(shù)據(jù),但是選擇一個而不是另一個很難。

但正如我的朋友所說,任何與?String?相關(guān)的問題都必須對字符串的特殊屬性有一些線索,比如不變性,他用它來說服訪提問的人。在這里,我們將探討為什么你應(yīng)該使用char[]存儲密碼而不是String的一些原因。

字符串:

1)由于字符串在 Java 中是不可變的,如果你將密碼存儲為純文本,它將在內(nèi)存中可用,直到垃圾收集器清除它,并且為了可重用性,會存在?String?在字符串池中, 它很可能會保留在內(nèi)存中持續(xù)很長時間,從而構(gòu)成安全威脅。

由于任何有權(quán)訪問內(nèi)存轉(zhuǎn)儲的人都可以以明文形式找到密碼,這是另一個原因,你應(yīng)該始終使用加密密碼而不是純文本。

由于字符串是不可變的,所以不能更改字符串的內(nèi)容,因為任何更改都會產(chǎn)生新的字符串,而如果你使用char[],你就可以將所有元素設(shè)置為空白或零。

因此,在字符數(shù)組中存儲密碼可以明顯降低竊取密碼的安全風(fēng)險。

2)Java 本身建議使用?JPasswordField?的?getPassword()?方法,該方法返回一個?char[]?和不推薦使用的getTex()?方法,該方法以明文形式返回密碼,由于安全原因。應(yīng)遵循 Java 團隊的建議, 堅持標準而不是反對它。

3)使用?String?時,總是存在在日志文件或控制臺中打印純文本的風(fēng)險,但如果使用 Array,則不會打印數(shù)組的內(nèi)容而是打印其內(nèi)存位置。雖然不是一個真正的原因,但仍然有道理。

String?strPassword?=“Unknown”;?? char?[]?charPassword?=?new?char?[]?{'U','n','k','w','o','n'};?? System.out.println(“字符密碼:”+ strPassword);?? System.out.println(“字符密碼:”+ charPassword);

輸出

字符串密碼:Unknown ?
字符密碼:[C @110b053

我還建議使用散列或加密的密碼而不是純文本,并在驗證完成后立即從內(nèi)存中清除它。

因此,在Java中,用字符數(shù)組用存儲密碼比字符串是更好的選擇。

雖然僅使用char[]還不夠,還你需要擦除內(nèi)容才能更安全。

版本申明:本作品系作者 Yujiaao?原創(chuàng),采用《署名-非商業(yè)性使用-禁止演繹 4.0 國際》許可協(xié)議,來源:segmentfault.com/a/1190000019962661

總結(jié)

以上是生活随笔為你收集整理的为什么 char 数组比 String 更适合存储密码?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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