代码之家  ›  专栏  ›  技术社区  ›  Phil

返回哈希字符串的存储过程

  •  1
  • Phil  · 技术社区  · 15 年前

    我直接在数据库中编写T-SQL。

    ALTER PROCEDURE dbo.ConvertToHash
    
     (
     @stringToHash nvarchar(256),
     @hashedString nvarchar(256) OUTPUT
     )
    
    AS
     DECLARE @HashThis nvarchar(256);
     SELECT @HashThis = CONVERT(nvarchar(256), @stringToHash);
     SELECT @hashedString = HashBytes('SHA1', @HashThis);
    
    
    2 回复  |  直到 15 年前
        1
  •  1
  •   John Sansom    15 年前

    最后一个select语句是赋值,而不是返回值。您可以对相关变量发出另一条select语句(下面包含的修改后的代码供您参考),也可以按照Remus的建议将输出参数合并到存储过程设计中。

    ALTER PROCEDURE dbo.ConvertToHash
    
     (
     @stringToHash nvarchar(256),
     @hashedString nvarchar(256) OUTPUT
     )
    
    AS
     DECLARE @HashThis nvarchar(256);
     SELECT @HashThis = CONVERT(nvarchar(256), @stringToHash);
     SELECT @hashedString = HashBytes('SHA1', @HashThis);
     SELECT @hashedString 
    
        2
  •  3
  •   Remus Rusanu    15 年前

    现在,您的过程将散列强制转换为Unicode字符串,但这是不正确的,因为并非所有字节组合在Unicode中都有效,并且散列很可能命中无效的Unicode字符。

    ALTER PROCEDURE dbo.ConvertToHash
     (
     @stringToHash nvarchar(256),
     @hashedString binary(20) OUTPUT
     )
    AS
     SET @hashedString = HashBytes('SHA1', @stringToHash);
    

    确保将哈希值保留为二进制(20) 到处 在你的代码中,使用它作为 byte[]