我正在玩Asymmetric Encryption and Decryption,但我不明白我在尝试解密数值时得到的结果。
为什么这样:
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
。
更新:从0x47726567
转换后,我很笨,Greg
为varbinary
。
答案 0 :(得分:3)
这是正确的 - 当你加密一些东西时,它被视为一个字节数组,并按原样返回。 0x47是G,72是r等
如果查看DecryptByAsmKey的文档,您会注意到返回类型为varbinary,最大大小为8,000字节。您还会注意到示例中的转换。
因此,如果您要加密和解密字符串,则必须进行转换
SELECT CONVERT(varchar(max),DECRYPTBYASYMKEY(ASYMKEY_ID('myasymkey'),
EncryptByAsymKey(AsymKey_ID('myasymkey'),
'Greg'),
N'123pass!'));
另请注意,您需要确保根据输入转换为varchar(max)或nvarchar(max)。如果你试过
SELECT CONVERT(nvarchar(max),DECRYPTBYASYMKEY(ASYMKEY_ID('myasymkey'),
EncryptByAsymKey(AsymKey_ID('myasymkey'),
'Greg'),
N'123pass!'));
这是错误的,因为您输入的'Greg'是varchar。
答案 1 :(得分:2)
我认为0x47726567
是Greg
(用ASCII格式)。
答案 2 :(得分:1)
所有加密函数都返回varbinary值。您必须将结果转换为varchar。