Computer >> Máy Tính >  >> Lập trình >> Java

Tại sao mảng Char [] an toàn hơn (lưu trữ dữ liệu nhạy cảm) hơn String trong Java?

Cả Chuỗi và mảng Char [] được sử dụng để lưu trữ dữ liệu dạng văn bản nhưng việc lựa chọn dữ liệu này thay thế dữ liệu khác khó hơn. Có lẽ chúng ta có thể lấy ý tưởng từ tính bất biến của Chuỗi tại sao char [] mảng được ưu tiên hơn Chuỗi để lưu trữ dữ liệu thông tin nhạy cảm như mật khẩu , SSN, vv

  • Sử dụng chuỗi thuần túy thì khả năng vô tình in mật khẩu vào nhật ký hoặc một số nơi không an toàn khác là char [] array sẽ cao hơn nhiều ít bị tổn thương hơn .
  • Chuỗi là bất biến , không có phương thức nào được định nghĩa cho phép chúng ta thay đổi hoặc ghi đè lên nội dung của chuỗi. Tính năng này làm cho các đối tượng chuỗi không ổn định để lưu trữ thông tin an toàn như mật khẩu , SSN, v.v ... Chúng ta nên lưu trữ thông tin an toàn trong mảng char [] hơn là Chuỗi.
  • Vì Chuỗi là bất biến nếu chúng tôi lưu trữ mật khẩu dưới dạng văn bản thuần túy, nó sẽ có sẵn trong bộ nhớ cho đến khi rác nhà sưu tập làm sạch nó. Vì chuỗi được sử dụng S tring Pool Constant (SCP) đối với khả năng tái sử dụng của một chuỗi, sẽ có rất nhiều khả năng là nó sẽ lưu lại trong bộ nhớ trong một thời gian dài. Vì bất kỳ ai có quyền truy cập vào kết xuất bộ nhớ đều có thể dễ dàng tìm thấy mật khẩu ở dạng văn bản thuần túy, đó là một lý do khác nên sử dụng mã hóa mật khẩu hơn văn bản thuần túy.
  • Nếu chúng tôi nhận thấy trong ứng dụng Java Swing , có một phương pháp JPasswordField getPassword () trả về char [] và phương thức getText () không được dùng nữa trả lại mật khẩu ở dạng văn bản thuần túy. Vì vậy, bản thân java khuyến nghị sử dụng mật khẩu lấy () phương pháp.
  • Một lý do khác để lưu trữ mật khẩu trong mảng char [] , bởi vì char [] có thể được khử trùng, chẳng hạn như sau khi sử dụng, người ta có thể ghi đè một mật khẩu rõ ràng bằng rác, trong khi Chuỗi là bất biến trong Java.

Ví dụ

public class SecureInfoData {
   public static void main(String args[]) {
      String pwd = "string_pass_word";
      System.out.println("String Password is: " + pwd);
      char charPwd[] = "char_pass_word".toCharArray();
      System.out.println("Character Password is: " + charPwd);
   }
}

Đầu ra

String Password is: string_pass_word
Character Password is: [C@6d06d69c