应该使用 char[] 保存 Java 密码

以下内容引用《Java安全性, 第一部分: 密码学基础》:

存储/删除密码。如果密码是存储在 Java String 对象中的,则直到对它进行垃圾收集或进程终止之前,密码会一直驻留在内存中。即使进行了垃圾收集,它仍会存在于空闲内存堆中,直到重用该内存空间为止。密码 String 在内存中驻留得越久,遭到窃听的危险性就越大。

更糟的是,如果实际内存减少,则操作系统会将这个密码 String 换页调度到磁盘的交换空间,因此容易遭受磁盘块窃听攻击。

为了将这种泄密的可能性降至最低(但不是消除),您应该将密码存储在 char 数组中,并在使用后对其置零。(String 是不可变的,所以无法对其置零。)

.

By javafuns on January 28, 2010 at 10:40 · Views: 92 · Permalink
Categorized in: Java · Tagged with: 
1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading ... Loading ...

Leave a Reply


  • Highest Rated

  • My PicasaPhotos

    IMG_0652.JPG

    IMG_0604.JPG

    IMG_0615.JPG

  • RSS My del.icio.us

  • My RSS