Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

DECRYPTBYASYMKEY() não está retornando o valor esperado


Está certo - quando você criptografa algo, ele é tratado como uma matriz de bytes e é retornado como tal. 0x47 é G, 72 é r etc.

Se você examinar a documentação para DecryptByAsmKey você notará que o tipo de retorno é varbinary com um tamanho máximo de 8.000 bytes. Você também notará a conversão no exemplo.

Então, se você está criptografando e descriptografando strings, você deve converter assim
SELECT CONVERT(varchar(max),DECRYPTBYASYMKEY(ASYMKEY_ID('myasymkey'), 
    EncryptByAsymKey(AsymKey_ID('myasymkey'), 
    'Greg'), 
    N'123pass!'));

Observe também que você precisa ter certeza de que está convertendo para varchar(max) ou nvarchar(max) dependendo da sua entrada. Se você tentou
SELECT CONVERT(nvarchar(max),DECRYPTBYASYMKEY(ASYMKEY_ID('myasymkey'), 
    EncryptByAsymKey(AsymKey_ID('myasymkey'), 
    'Greg'), 
    N'123pass!'));

seria errado, pois sua entrada de 'Greg' é um varchar.