Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Làm thế nào để có được khả năng tương thích giữa Mã hóa AES C # và SQL2k8?

Có một số điều tôi muốn xem xét:

  1. Đả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.

  2. Đả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ụng RijndaelManaged , 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ụng Aes lớp).

  3. Đ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ự):



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chúng tôi có thể từ chối xóa khỏi các bảng cụ thể không?

  2. Tại sao tôi gặp lỗi Kiểu dữ liệu Xml không được hỗ trợ trong các truy vấn phân tán khi truy vấn máy chủ được liên kết cho dữ liệu không phải xml?

  3. Làm thế nào để áp dụng 3 giá trị cho 1 hàng cho 3 hàng với mỗi giá trị?

  4. SQL động (chuyển tên bảng làm tham số)

  5. Hợp nhất dữ liệu thành hai bảng đích