Когда я использую encryptbypassphrase не получить тот же хэш, и я не могу сделать эффективный индекс в SQL Server 2014 - PullRequest
0 голосов
/ 21 марта 2019

У меня большая база данных в SQL Server 2014 Enterprise. Он содержит около 50 миллионов строк данных в конкретной таблице. Эта таблица имеет 7 зашифрованных столбцов; Лицензия одна. С этой колонкой обращаются в таком виде:

select * 
from table 
where license = encryptbypassphrase (license)

Этот хеш-код никогда не бывает прежним и в результате не высылается мне. Как я могу зашифровать или как вызвать этот запрос?

Я тестировал, используя:

  • encryptbypassphrase
  • encryptbykey
  • encryptbycertificate
  • функция, но производительность с этой функцией очень плохая

Код:

CREATE FUNCTION [encripta3]
    (@entrada VARCHAR(1000))
RETURNS VARCHAR(4000)
AS
BEGIN
    IF @entrada IS NULL 
        SET @entrada = '<NULL />'

    IF @entrada = ''
        SET @entrada = '<EMPTY />'

    DECLARE @valbin VARBINARY(10) = 0
    DECLARE @valhex VARCHAR(20) = ''
    DECLARE @pos INT = 1
    DECLARE @caracter VARCHAR(1) = ''
    DECLARE @longitud INT = LEN(@entrada)
    DECLARE @salida VARCHAR(4000) = ''
    DECLARE @relleno INT = 0xeb459

    SET @salida = RIGHT(master.dbo.fn_varbintohexstr(@longitud), 3) 

    WHILE @pos < LEN(@entrada) + 1
    BEGIN
        SET @caracter = SUBSTRING(@entrada, @pos, 1)
        SET @valbin = UNICODE(@caracter) 
        SET @valhex = RIGHT(master.dbo.fn_varbintohexstr(@valbin), 3) + 
                      RIGHT(master.dbo.fn_varbintohexstr(@relleno), 3)

        SET @relleno = @relleno - 1
        SET @salida = @salida + @valhex
        SET @pos = @pos + 1
    END

    WHILE len(@salida) < 30 
    BEGIN
        SET @valhex = RIGHT(master.dbo.fn_varbintohexstr(@relleno), 1)
        SET @relleno = @relleno - 1
        SET @salida = @salida + @valhex
    END

    RETURN @salida
...