Je několik věcí, na které bych se podíval:
-
Zcela se ujistěte, že prostý text je identický co do obsahu a kódování. IIRC, streamuje výchozí UTF-8, zatímco pokud váš
VarBinaryToBase64
funkce vezměte parametr nvarchar, bude to Unicode. -
Ujistěte se, že oba šifrovací algoritmy používají stejnou velikost bloku. V SQL určíte algoritmus, když zavoláte
CREATE SYMMETRIC KEY
. Pokud neurčíte algoritmus, použije AES256. V .NET pomocíRijndaelManaged
, Věřím, že výchozí velikost bloku je 128, ale můžete ji nastavit na 256 (nemůžete, pokud použijeteAes
třída). -
Poslední věc, kterou bych hledal, je, jak SQL Server pracuje s inicializačními vektory, jak jste zmínil ve svém upraveném příspěvku. Chci říci, že používá
authenticator
parametr, ale to je divoký odhad.
UPRAVIT
Byl jsem úplně mimo. Vzhledem k tomu, co jsem objevil, nemůžete použít třídu .NET k dešifrování textu zašifrovaného vestavěným šifrováním SQL Serveru, protože SQL Server přidává k zašifrovanému mnoho chyb, včetně náhodného inicializačního vektoru. Z knihy Michaela Colea "Pro T-SQL 2005 Programmer's Guide" (ačkoli 2008 to dělá stejným způsobem):