Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

DECRYPTBYASYMKEY() Non restituisce il valore atteso

È giusto:quando si crittografa qualcosa, viene trattato come un array di byte e viene restituito come tale. 0x47 è G, 72 è r ecc.

Se esamini la documentazione per DecryptByAsmKey noterai che il tipo restituito è varbinary con una dimensione massima di 8.000 byte. Noterai anche la conversione nell'esempio.

Quindi, se stai crittografando e decrittografando stringhe, devi convertire in questo modo

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

Nota inoltre che devi assicurarti di eseguire la conversione in varchar(max) o nvarchar(max) a seconda del tuo input. Se hai provato

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

sarebbe sbagliato, poiché il tuo input di 'Greg' è un varchar.