sql >> Databáze >  >> RDS >> Sqlserver

DECRYPTBYASYMKEY() nevrací očekávanou hodnotu

Je to tak - když něco zašifrujete, je to považováno za bajtové pole a jako takové je vráceno. 0x47 je G, 72 je r atd.

Pokud si prostudujete dokumentaci pro DecryptByAsmKey všimnete si, že návratový typ je varbinary s maximální velikostí 8 000 bajtů. V příkladu si také všimnete převodu.

Pokud tedy šifrujete a dešifrujete řetězce, musíte převádět takto

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

Všimněte si také, že se musíte ujistit, že převádíte na varchar(max) nebo nvarchar(max) v závislosti na vašem vstupu. Pokud jste to zkusili

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

bylo by to špatně, protože váš vstup 'Greg' je varchar.



  1. Získejte předchozí a další řádek z řádků vybraných s podmínkami (WHERE).

  2. Připojení ke vzdálené databázi Oracle DB s Nodejs prostřednictvím ovladače Oracledb

  3. Použití file_get_html(); vrací HTML se speciálními znaky, i když používám -> prostý text

  4. Kolejnice – vyhledá pouze záznamy, kde je přítomno has_many souvisejících záznamů