Am I interfacing in a secure manner with rijndael?
CalculatePasswordHash is inadvertently reimplementing (and probably not as well) a standard primitive. You should use System.Security.Cryptography.Rfc2898DeriveBytes instead.
The code

    var desc = crypto.CreateEncryptor();
    ...
    desc.Dispose();


raises a red flag. Why isn't it using using?
You write to a memory stream and then write the contents of the memory stream unmodified to a file. It seems that you could simplify this just skipping the middle-man.