Jag tror att den här artikeln kan vara mycket relevant för det du gör. Om du verkligen vill "anonymisera" SSN:erna av säkerhetsskäl och juridiskt ansvar, så räcker det inte att bara hasha dem.
Att bara hasha dem skulle vara en helt deterministisk process, så för att effektivt "maskera" enskilda SSN:er måste processen randomiseras. Annars kan du helt enkelt brute force genom alla möjliga kombinationer av SSN (vilket skulle kräva mycket mindre arbete än att försöka brute force hash-funktionen) och leta efter ett matchande värde.
För att se varför detta gäller, ta det mest förenklade exemplet att ett SSN bara kan anta två värden, 0 och 1. Oavsett kvaliteten och styrkan hos hashfunktionen kommer det i slutändan bara att finnas två möjliga utfall och det är lätt att se vilket är vilket.
Det är det gamla spelet om varför man inte ska hasha t.ex. lösenord direkt utan att först utföra någon förbearbetning av dem. Den underliggande informationen innehåller helt enkelt inte tillräckligt med entropi och kommer därför att vara ett enkelt mål för uppslagningar i en förberäknad tabell.
Så snart dina SSN:er blir privata och konfidentiella (de finns inte i alla länder, så ursäkta min dumma fråga i kommentarerna :), bör samma bästa praxis som också används för lösenordslagring också vara tillämpliga på just ditt fall, d.v.s. en långsam adaptiv hashalgoritm som kompenserar för bristen på initial entropi som bcrypt, scrypt och PBKDF2 (som redan rekommenderades av Marcus Adams).