sql >> Base de Datos >  >> RDS >> Sqlserver

DECRYPTBYASYMKEY() no devuelve el valor esperado

Es correcto:cuando cifra algo, se trata como una matriz de bytes y se devuelve como tal. 0x47 es G, 72 es r, etc.

Si examina la documentación de DecryptByAsmKey notará que el tipo de retorno es varbinary con un tamaño máximo de 8000 bytes. También notará la conversión en el ejemplo.

Entonces, si está encriptando y desencriptando cadenas, debe convertirlas así

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

También tenga en cuenta que debe asegurarse de convertir a varchar (max) o nvarchar (max) según su entrada. Si lo intentaras

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

sería incorrecto, ya que su entrada de 'Greg' es un varchar.