Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

DECRYPTBYASYMKEY() nie zwraca oczekiwanej wartości

Zgadza się - kiedy coś zaszyfrujesz, jest ono traktowane jako tablica bajtów i jako takie jest zwracane. 0x47 to G, 72 to r itd.

Jeśli przejrzysz dokumentację DecryptByAsmKey zauważysz, że zwracany typ to varbinary o maksymalnym rozmiarze 8000 bajtów. Zauważysz również konwersję w przykładzie.

Więc jeśli szyfrujesz i odszyfrowujesz ciągi, musisz je konwertować w ten sposób

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

Pamiętaj również, że musisz upewnić się, że konwertujesz na varchar(max) lub nvarchar(max) w zależności od danych wejściowych. Jeśli próbowałeś

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

byłoby źle, ponieważ wpisany przez Ciebie tekst „Greg” to 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. jak obliczyć liczbę dni w roku w serwerze sql 2008

  2. Sterownik Microsoft ODBC 13 dla programu SQL Server:Logowanie nie powiodło się dla użytkownika „sa”

  3. SQL Server Konkatenacja GROUP BY

  4. SQL Server 2008 — Jak zwrócić typ tabeli zdefiniowanej przez użytkownika z funkcji o wartościach przechowywanych w tabeli?

  5. Funkcja QUALIFY-podobna w SQL Server