Ada beberapa hal yang akan saya lihat:
-
Pastikan benar-benar bahwa plaintext identik dalam konten dan penyandian. IIRC, streaming default ke UTF-8 sedangkan jika
VarBinaryToBase64
Anda fungsi mengambil parameter nvarchar, itu akan menjadi Unicode. -
Pastikan kedua algoritma enkripsi menggunakan ukuran blok yang sama. Dalam SQL, Anda menentukan algoritme saat Anda memanggil
CREATE SYMMETRIC KEY
. Jika Anda tidak menentukan algoritme, ia menggunakan AES256. Di .NET menggunakanRijndaelManaged
, saya yakin ukuran blok default adalah 128 tetapi Anda dapat mengaturnya menjadi 256 (Anda tidak dapat melakukannya jika Anda menggunakanAes
kelas). -
Hal terakhir yang saya cari adalah bagaimana SQL Server menangani Vektor Inisialisasi seperti yang Anda sebutkan dalam posting Anda yang diubah. Saya ingin mengatakan bahwa itu menggunakan
authenticator
parameter untuk ini, tapi itu tebakan liar.
EDIT
Aku jauh. Mengingat apa yang saya temukan, Anda tidak dapat menggunakan kelas .NET untuk mendekripsi teks yang dienkripsi oleh enkripsi bawaan SQL Server karena SQL Server menambahkan banyak goo ke apa yang dienkripsi, termasuk vektor inisialisasi acak. Dari buku Michael Cole "Panduan Programmer Pro T-SQL 2005" (walaupun tahun 2008 melakukan hal yang sama):