sql >> Databasteknik >  >> RDS >> Sqlserver

DECRYPTBYASYMKEY() Returnerar inte förväntat värde

Det är rätt - när du krypterar något behandlas det som en byte-array och returneras som sådan. 0x47 är G, 72 är r osv.

Om du granskar dokumentationen för DecryptByAsmKey du kommer att märka att returtypen är varbinär med en maximal storlek på 8 000 byte. Du kommer också att märka konverteraren i exemplet.

Så om du krypterar och dekrypterar strängar måste du konvertera som så

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

Observera också att du måste se till att du konverterar till varchar(max) eller nvarchar(max) beroende på din inmatning. Om du försökte

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

det skulle vara fel, eftersom din inmatning av 'Greg' är en varchar.



  1. Stänga av och starta Oracle-instansen

  2. cx_Oracle och undantagshantering - god praxis?

  3. Gaps and Islands-lösning i Oracle - användning av rekursiv

  4. fel, sträng eller binär data skulle trunkeras när man försöker infoga