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

DECRYPTBYASYMKEY () Không trả lại giá trị mong đợi

Nó đúng - khi bạn mã hóa một thứ gì đó, nó được coi là một mảng byte và được trả về như vậy. 0x47 là G, 72 là r, v.v.

Nếu bạn kiểm tra tài liệu cho DecryptByAsmKey bạn sẽ nhận thấy kiểu trả về là varbinary với kích thước tối đa là 8.000 byte. Bạn cũng sẽ nhận thấy chuyển đổi trong ví dụ.

Vì vậy, nếu bạn đang mã hóa và giải mã chuỗi, bạn phải chuyển đổi như vậy

SELECT CONVERT(varchar(max),DECRYPTBYASYMKEY(ASYMKEY_ID('myasymkey'), 
    EncryptByAsymKey(AsymKey_ID('myasymkey'), 
    'Greg'), 
    N'123pass!'));

Cũng lưu ý rằng bạn cần đảm bảo rằng bạn đang chuyển đổi thành varchar (tối đa) hoặc nvarchar (tối đa) tùy thuộc vào đầu vào của bạn. Nếu bạn đã thử

SELECT CONVERT(nvarchar(max),DECRYPTBYASYMKEY(ASYMKEY_ID('myasymkey'), 
    EncryptByAsymKey(AsymKey_ID('myasymkey'), 
    'Greg'), 
    N'123pass!'));

nó sẽ sai, vì đầu vào 'Greg' của bạn là một varchar.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Đổi tên khóa chính trong SQL Server (T-SQL)

  2. 3 cách lấy tên tháng từ ngày trong SQL Server (T-SQL)

  3. CHỈ Tìm các chữ cái viết hoa trong word thông qua truy vấn IN SQL Server

  4. Giới hạn đệ quy ở mức nhất định - Các hàng trùng lặp

  5. COUNT () so với COUNT_BIG () trong SQL Server:Sự khác biệt là gì?