1

私はAsymmetric Encryption and Decryptionで遊んでいますが、値を解読しようとすると結果が分かりません。DECRYPTBYASYMKEY()が期待値を返さない

なぜこれを行います。

CREATE ASYMMETRIC KEY myasymkey 
    WITH ALGORITHM = RSA_2048 
    ENCRYPTION BY PASSWORD = '123pass!'; 
GO 

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

プロデュース0x47726567を?私はそれがGregであることを期待していた。

UPDATE:私は馬鹿だ、varbinaryから変換するとき0x47726567Gregです。

答えて

3

何かを暗号化すると、バイト配列として扱われ、そのまま返されます。 0x47はG、72はrなど

DecryptByAsmKeyのドキュメントを調べると、戻り値の型はvarbinaryで、最大サイズは8,000バイトです。また、この例ではconvertに気づくでしょう。

あなたが暗号化および復号化されているのであれば、あなたがそう

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

のように変換する必要があります文字列はまた、あなたがあなたの入力に応じて、varchar型(最大)またはNVARCHAR(MAX)に変換していることを確認する必要があります注意してください。試してみた場合、 'Greg'の入力はvarcharであるため、間違っている可能性があります。

2

0x47726567Greg(ASCII)です。

1

すべての暗号化関数は、varbinary値を返します。結果をvarcharとしてキャストする必要があります。

関連する問題