【问题标题】:DECRYPTBYASYMKEY() Not Returning Expected ValueDECRYPTBYASYMKEY() 不返回预期值
【发布时间】:2012-02-04 18:59:02
【问题描述】:

我在玩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

更新:我很笨,0x47726567varbinary 转换后是 Greg

【问题讨论】:

    标签: sql-server sql-server-2008 encryption encryption-asymmetric


    【解决方案1】:

    我认为0x47726567Greg(ASCII 格式)。

    【讨论】:

      【解决方案2】:

      所有加密函数都返回 varbinary 值。您必须将结果转换为 varchar。

      【讨论】:

        【解决方案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。

        【讨论】:

          猜你喜欢
          • 2013-03-22
          • 2012-02-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-12-03
          • 2014-06-18
          相关资源
          最近更新 更多