Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

DECRYPTBYASYMKEY() gibt den erwarteten Wert nicht zurück

Es ist richtig - wenn Sie etwas verschlüsseln, wird es als Byte-Array behandelt und als solches zurückgegeben. 0x47 ist G, 72 ist r usw.

Wenn Sie die Dokumentation für DecryptByAsmKey untersuchen Sie werden feststellen, dass der Rückgabetyp varbinary mit einer maximalen Größe von 8.000 Bytes ist. Sie werden auch die Konvertierung im Beispiel bemerken.

Wenn Sie also Zeichenfolgen verschlüsseln und entschlüsseln, müssen Sie sie wie folgt umwandeln

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

Beachten Sie auch, dass Sie sicherstellen müssen, dass Sie abhängig von Ihrer Eingabe in varchar(max) oder nvarchar(max) konvertieren. Wenn Sie es versucht haben

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

es wäre falsch, da Ihre Eingabe von 'Greg' ein varchar ist.