哈希几个字符串tsql

时间:2015-06-01 08:44:44

标签: sql sql-server tsql

我正在尝试创建一个像这样的唯一哈希:

SELECT
    CAST(HASHBYTES('SHA1', 
        LTRIM(RTRIM(ISNULL('9',''))) + 
        LTRIM(RTRIM(isnull('X',''))) + 
        LTRIM(RTRIM(isnull('',''))) + 
        LTRIM(RTRIM(isnull('Y',''))) + 
        LTRIM(RTRIM(isnull('','')))) AS VARBINARY(20))

SELECT
    CAST(HASHBYTES('SHA1', 
        LTRIM(RTRIM(isnull('9',''))) + 
        LTRIM(RTRIM(isnull('X',''))) + 
        LTRIM(RTRIM(isnull('Y',''))) + 
        LTRIM(RTRIM(isnull('',''))) + 
        LTRIM(RTRIM(isnull('','')))) AS VARBINARY(20))

不幸的是,尽管有不同的字符串,我最终会得到相同的哈希值。有什么想法吗?

PS:

这解决了上述“问题”:

SELECT  LTRIM(RTRIM(ISNULL('9', '-'))) + N',' + LTRIM(RTRIM(ISNULL('X', '-')))
        + N',' + LTRIM(RTRIM(ISNULL('', '-'))) + N',' + LTRIM(RTRIM(ISNULL('Y',
                                                              '-'))) + N','
        + LTRIM(RTRIM(ISNULL('', '-'))) ,
        CAST(HASHBYTES('SHA1',
                       LTRIM(RTRIM(ISNULL('9', '-'))) + N','
                       + LTRIM(RTRIM(ISNULL('X', '-'))) + N','
                       + LTRIM(RTRIM(ISNULL('', '-'))) + N','
                       + LTRIM(RTRIM(ISNULL('Y', '-'))) + N','
                       + LTRIM(RTRIM(ISNULL('', '-')))) AS VARBINARY(20))

SELECT  LTRIM(RTRIM(ISNULL('9', '-'))) + N',' + LTRIM(RTRIM(ISNULL('X', '-')))
        + N',' + LTRIM(RTRIM(ISNULL('Y', '-'))) + N',' + LTRIM(RTRIM(ISNULL('',
                                                              '-'))) + N','
        + LTRIM(RTRIM(ISNULL('', '-'))) ,
        CAST(HASHBYTES('SHA1',
                       LTRIM(RTRIM(ISNULL('9', '-'))) + N','
                       + LTRIM(RTRIM(ISNULL('X', '-'))) + N','
                       + LTRIM(RTRIM(ISNULL('Y', '-'))) + N','
                       + LTRIM(RTRIM(ISNULL('', '-'))) + N','
                       + LTRIM(RTRIM(ISNULL('', '-')))) AS VARBINARY(20))

1 个答案:

答案 0 :(得分:5)

因为没有不同的标志:

    LTRIM(RTRIM(ISNULL('9',''))) + 
    LTRIM(RTRIM(isnull('X',''))) + 
    LTRIM(RTRIM(isnull('',''))) + 
    LTRIM(RTRIM(isnull('Y',''))) + 
    LTRIM(RTRIM(isnull('','')))) 

    -- is the same of

    LTRIM(RTRIM(isnull('9',''))) + 
    LTRIM(RTRIM(isnull('X',''))) + 
    LTRIM(RTRIM(isnull('Y',''))) + 
    LTRIM(RTRIM(isnull('',''))) + 
    LTRIM(RTRIM(isnull('','')))) 

    -- that is the same of

    '9XY'