At my office, we are currently working on a major overhaul of some of our core systems. The 'strategic' decision was made to lose most of our Unix machines and move to a more Microsoft oriented platform. One of the changes caused by this decision was the use of the Microsoft Provisioning System, so all the scripts we made over the years to help us run the business have to be converted for use by the MPF (Microsoft Provisioning Framework). We are changing the systems in a few steps, so at one point, we will have an MPS-based front-end, talking to the Unix back-end. At that point, the MPS will create the new user accounts, but because almost none of the servers and applications using the data from those user accounts have yet been converted, we need to be able to provide them with the information they are expecting. In this case, some of the applications expect a user account to contain a password encrypted with the Unix
crypt() system call. Thanks to the beauty of open source, the source code for that system call is widely available, and I was quickly able to find some source I could work with and port to C# (which we are using to create our custom MPF providers with).
Using the code
Using the code is very straightforward. Either put the class in your own application, or put it in a class library. There are two calls:
string Crypt(string textToEncrypt);
string Crypt(string encryptionSalt, string textToEncrypt);
static members. If you use the first method, it will randomly generate the salt characters for you and then call the second method. Salt, in this case, are two letters that are used to provide some extra randomness for the encryption, and allow you to repeat any previous encryption (if you also have the text that was encrypted).
Another thing users should know is that the text to encrypt should not be more then 8 characters long. If your text is longer than 8 characters, only the first 8 are used and the rest is ignored.