Có một số điều tôi muốn xem xét:
-
Đảm bảo tuyệt đối rằng bản rõ giống hệt nhau về nội dung và mã hóa. IIRC, các luồng mặc định là UTF-8 trong khi nếu
VarBinaryToBase64
của bạn hàm lấy một tham số nvarchar, nó sẽ là Unicode. -
Đảm bảo rằng cả hai thuật toán mã hóa đều sử dụng cùng một kích thước khối. Trong SQL, bạn xác định thuật toán khi bạn gọi
CREATE SYMMETRIC KEY
. Nếu bạn không chỉ định một thuật toán, nó sẽ sử dụng AES256. Trong .NET sử dụngRijndaelManaged
, Tôi tin rằng kích thước khối mặc định là 128 nhưng bạn có thể đặt nó thành 256 (bạn không thể đặt nó nếu bạn sử dụngAes
lớp). -
Điều cuối cùng tôi muốn tìm là cách SQL Server xử lý các Vectơ Khởi tạo như bạn đã đề cập trong bài đăng sửa đổi của mình. Tôi muốn nói rằng nó sử dụng
authenticator
tham số cho điều này, nhưng đó là một phỏng đoán hoang đường.
CHỈNH SỬA
Tôi đã đi tắt. Theo những gì tôi đã phát hiện ra, bạn không thể sử dụng lớp .NET để giải mã văn bản được mã hóa bằng mã hóa tích hợp của SQL Server vì SQL Server thêm một loạt goo vào những gì được mã hóa, bao gồm cả vectơ khởi tạo ngẫu nhiên. Từ cuốn sách "Hướng dẫn lập trình viên Pro T-SQL 2005" của Michael Cole (mặc dù năm 2008 cũng làm theo cách tương tự):