我在玩弄 非对称 </跨度> 加密 </跨度> 和解密,但我不明白我尝试解密值时得到的结果。
为什么这样:
创建 不对称 </跨度> KEY myasymkey WITH ALGORITHM = RSA_2048 加密 </跨度> 通过密码=‘123pass!’;走
SELECT DECRYPTBYASYMKEY(ASYMKEY_ID(‘myasymkey’), EncryptByAsymKey(AsymKey_ID(‘myasymkey’),‘Greg’), N’123pass’)!;GO锟
它是正确的 - 当你加密它被视为字节数组的东西时,它会被返回。 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。
所有加密函数都返回varbinary值。您必须将结果转换为varchar。
我认为 0x47726567 是 Greg (以ASCII格式)。
0x47726567
Greg