Я подозреваю, что часть проблемы может заключаться в том, что перед шифрованием исходный пароль был закодирован как UTF-16, а вы расшифровываете его как UTF-8. Попробуйте изменить последнюю строку вашего Decrypt
метода:
return Encoding.Unicode.GetString(resultArray);
Это не объясняет всех этих ложных ведущих нулей. Очень странно ...
EDIT ...
На самом деле, я, кажется, помню, что SqlMembershipProvider
перед шифрованием ставит префикс байтов пароля 16-байтовой солью, и в этом случае вам, вероятно, удастся сойти с рук что-то вроде этого:
return Encoding.Unicode.GetString(resultArray, 16, resultArray.Length - 16);
Но это все же не объясняет, почему все эти 16 байтов являются нулями, а не набором случайных значений ...