Tôi nghĩ rằng bài viết này có thể rất liên quan đến những gì bạn đang làm. Nếu thực sự bạn muốn "ẩn danh" các SSN vì lý do bảo mật và trách nhiệm pháp lý, thì chỉ cần băm chúng là không đủ.
Chỉ băm chúng sẽ là một quá trình hoàn toàn xác định, vì vậy để "che giấu" các SSN riêng lẻ một cách hiệu quả, quá trình này cần phải được ngẫu nhiên hóa. Nếu không, bạn có thể chỉ cần brute force thông qua tất cả các kết hợp SSN có thể có (sẽ ít công việc hơn nhiều so với việc cố gắng brute force trong hàm băm) và tìm kiếm một giá trị phù hợp.
Để xem lý do tại sao điều này lại xảy ra, hãy lấy ví dụ đơn giản nhất rằng một SSN chỉ có thể nhận hai giá trị, 0 và 1. Bất kể chất lượng và độ mạnh của hàm băm như thế nào, cuối cùng sẽ chỉ có hai kết quả có thể xảy ra và rất dễ thấy đó là cái nào.
Đó là trò chơi cũ về lý do tại sao bạn không nên băm, ví dụ:mật khẩu trực tiếp mà không cần thực hiện một số xử lý trước trên chúng trước. Dữ liệu cơ bản không chứa đủ entropy và do đó sẽ là mục tiêu dễ dàng cho việc tra cứu trong một bảng được tính toán trước.
Ngay khi SSN của bạn trở nên riêng tư và bí mật (chúng không có ở mọi quốc gia, vì vậy hãy tha thứ cho câu hỏi ngu ngốc của tôi trong phần nhận xét :), các phương pháp hay nhất tương tự cũng được sử dụng để lưu trữ mật khẩu cũng nên áp dụng cho trường hợp cụ thể của bạn, tức là chậm thuật toán băm thích ứng bù đắp cho việc thiếu entropy ban đầu như bcrypt, scrypt và PBKDF2 (đã được Marcus Adams đề xuất).