SQL Encrypt / Decrypt числа - PullRequest
       10

SQL Encrypt / Decrypt числа

1 голос
/ 15 марта 2019

Интересно, возможно ли это в TSQL

Я знаю, что шифрование vigenere (cipher) может зашифровывать такие значения, как "Здравствуйте, как дела" , чтобы стать "Hfnlp, Joxcrf aov ", но проблема в том, что он сохраняет незашифрованные числа " 1234567 " останется " 1234567 "

любая идея, как зашифровать всевключая числа и иметь его в качестве функции / процедуры в SQL Server?

1 Ответ

0 голосов
/ 15 марта 2019

Я сам собрал скрипт

Для шифрования

ALTER FUNCTION [dbo].[fnEncrypt] 
(
    @Str varchar(max),
    @key varchar(max)
)
RETURNS varchar(max)
AS
BEGIN
--Akram Mustafa
declare @i int = 1
declare @x int = 0
declare @Result varchar(max) = ''
declare @List varchar(100) = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
declare @TempKey varchar(max) = @key

WHILE LEN(@TempKey) < LEN(@Str)
BEGIN
    SET @TempKey = @TempKey + @key 
END

SET @key = @TempKey

WHILE (@i <= LEN(@Str)) 
BEGIN
    IF (CHARINDEX(SUBSTRING(@Str, @i, 1), @List) > 0)
    BEGIN
        SET @x = ((CHARINDEX(SUBSTRING(@Str, @i, 1), @List) +  CHARINDEX(SUBSTRING(@key, @i, 1), @List)) % LEN(@List)) + 1
        SET @Result = @Result + SUBSTRING(@List, @x, 1)
    END
    ELSE
    BEGIN
        SET @Result = @Result + SUBSTRING(@Str, @i, 1)
    END
    SET @i = @i + 1
END

RETURN @Result
END

расшифровать

ALTER FUNCTION [dbo].[fnDecrypt] 
(
    @Str varchar(max),
    @key varchar(max)
)
RETURNS varchar(max)
AS
BEGIN
--Akram Mustafa
declare @i int = 1
declare @x int = 0
declare @Result varchar(max) = ''
declare @List varchar(100) = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
declare @TempKey varchar(max) = @key

WHILE LEN(@TempKey) < LEN(@Str)
BEGIN
    SET @TempKey = @TempKey + @key 
END

SET @key = @TempKey

WHILE (@i <= LEN(@Str)) 
BEGIN
    IF (CHARINDEX(SUBSTRING(@Str, @i, 1), @List) > 0)
    BEGIN
        SET @x = ((CHARINDEX(SUBSTRING(@Str, @i, 1), @List) -  CHARINDEX(SUBSTRING(@key, @i, 1), @List) + LEN(@List) - 1) % LEN(@List))
        IF @x = 0
        BEGIN
            SET @x = LEN(@List)
        END
        SET @Result = @Result + SUBSTRING(@List, @x, 1)
    END
    ELSE
    BEGIN
        SET @Result = @Result + SUBSTRING(@Str, @i, 1)
    END
    SET @i = @i + 1
END

RETURN @Result
END
...