Char và String: Quản lý mật khẩu trong ứng dụng
Source: https://www.tuanh.net/blog/java/character-arrays-and-strings-password-management-in-applications
Bạn có lẽ đã từng nghe về mã hóa, giải mã và băm khi nói đến bảo mật mật khẩu trong các ứng dụng web. Nhưng bạn đã bao giờ tự hỏi các ngôn ngữ lập trình khác nhau thực sự lưu trữ những mật khẩu đó như thế nào bên dưới? Trong bài viết này, tôi sẽ chia sẻ suy nghĩ của mình về việc sử dụng char[] và String để lưu trữ mật khẩu. Hãy cùng khám phá!
1. Mutable vs Immutable:
- Mảng ký tự (char[]) là một kiểu dữ liệu có thể thay đổi. Bạn có thể xóa mật khẩu khỏi mảng ký tự khi không cần dùng đến nó nữa.
- Chuỗi (String) là không thể thay đổi, có nghĩa là một khi bạn tạo ra một đối tượng chuỗi chứa mật khẩu, bạn không thể thay đổi nó. Bất kỳ sửa đổi nào cũng sẽ tạo ra một đối tượng chuỗi mới.
2. Garbage Collection
- Khi bạn xóa một mảng ký tự (char array), bạn có thể ghi đè dữ liệu trong mảng để xóa sạch nó. Dữ liệu sau đó vẫn còn trong bộ nhớ và có thể bị ghi đè bởi dữ liệu khác.
- Trong trường hợp của String, một khi bạn không còn sử dụng đối tượng String chứa mật khẩu, bạn không thể kiểm soát việc thu gom rác của Java. Dữ liệu mật khẩu có thể tiếp tục tồn tại trong bộ nhớ và không thể được kiểm soát.
3. Kỹ thuật đảo ngược
Trong các ứng dụng Java, đối tượng String là bất biến, nghĩa là mật khẩu của bạn có thể bị "theo dõi" trong bộ nhớ bởi các công cụ hoặc cuộc tấn công kỹ thuật đảo ngược. Tin tặc có thể lấy được dữ liệu mật khẩu từ một đối tượng String hiện có.
4. Kết luận
Kiểu dữ liệu chuỗi (String) là rất hữu ích, nhưng trong một số trường hợp như đã đề cập, sử dụng mảng ký tự (char[]) là lựa chọn tối ưu hơn về mặt bảo mật. Thông qua bài viết này, tôi hy vọng bạn đã có cái nhìn tổng quan về mảng ký tự (char[]) và chuỗi (String) - Xử lý mật khẩu trong ứng dụng. Cảm ơn bạn đã đọc! Chúc bạn lập trình vui vẻ!
All rights reserved