Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

DECRYPTBYASYMKEY() ne renvoie pas la valeur attendue

C'est vrai - lorsque vous cryptez quelque chose, il est traité comme un tableau d'octets et est renvoyé comme tel. 0x47 est G, 72 est r etc.

Si vous examinez la documentation de DecryptByAsmKey vous remarquerez que le type de retour est varbinary avec une taille maximale de 8 000 octets. Vous remarquerez également la conversion dans l'exemple.

Donc, si vous chiffrez et déchiffrez des chaînes, vous devez convertir comme ceci

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

Notez également que vous devez vous assurer que vous convertissez en varchar(max) ou nvarchar(max) en fonction de votre entrée. Si vous avez essayé

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

ce serait faux, car votre entrée de 'Greg' est un varchar.