Jest kilka rzeczy, którym chciałbym się przyjrzeć:
-
Upewnij się, że tekst jawny jest identyczny pod względem zawartości i kodowania. IIRC, strumienie są domyślnie ustawione na UTF-8, natomiast jeśli Twój
VarBinaryToBase64
funkcja przyjmuje parametr nvarchar, będzie to Unicode. -
Upewnij się, że oba algorytmy szyfrowania używają tego samego rozmiaru bloku. W SQL algorytm określasz, wywołując
CREATE SYMMETRIC KEY
. Jeśli nie określisz algorytmu, użyje on AES256. W .NET przy użyciuRijndaelManaged
, uważam, że domyślny rozmiar bloku to 128, ale możesz ustawić go na 256 (nie możesz, jeśli używaszAes
klasa). -
Ostatnią rzeczą, której bym szukał, jest to, jak SQL Server radzi sobie z wektorami inicjalizacji, jak wspomniałeś w poprawionym poście. Chcę powiedzieć, że używa
authenticator
tego parametru, ale to szalone zgadywanie.
EDYTUJ
Byłem daleko. Biorąc pod uwagę to, co odkryłem, nie można użyć klasy .NET do odszyfrowania tekstu zaszyfrowanego za pomocą wbudowanego szyfrowania SQL Server, ponieważ SQL Server dodaje mnóstwo szlamu do tego, co jest zaszyfrowane, w tym losowy wektor inicjalizacji. Z książki Michaela Cole'a "Pro T-SQL 2005 Programmer's Guide" (chociaż 2008 robi to w ten sam sposób):