教你怎樣實現SQL密文加密,不可反編譯

时间:2021-04-05 16:05:03

use Tempdb

go

if object_ID('fn_ACITEncryption') is not null

    drop functionfn_ACITEncryption

go

create function fn_ACITEncryption

(

    @Str nvarchar(4000),--加密的字符串

    @Flag bit=1,--1、加密0、解密

    @Key nvarchar(50)--密文

)

returns nvarchar(4000)--這里可轉換成二進制

with Encryption

as

begin

Declare @LenStr int,@i int,@Str2 nvarchar(4000),@Split nvarchar(2),@LenKey int

select @Str=@Str+'A',@LenStr=len(@Str),@i=1,@Str2='',@LenKey=Len(@Key+'A')-1

while @i<@LenStr

        select   @Split=substring(@Str,@i,1),

               @Split=nchar((unicode(@Split)+case @Flag    when 1 then unicode(substring(@Key+'A',@i%@LenKey+1,1))-1                                               

                                                   when 0 then65535-unicode(substring(@Key+'A',@i%@LenKey+1,1))

                                                   else 0 end)%65535+cast(@Flag as int)),

                @Str2=@Str2+@Split,@i=@i+1

return @Str2

 

end

go

select dbo.fn_ACITEncryption(N'Roy',1,'123') as 加密后字符串

 

/*

加密后字符串

------------------------------

(1 個資料列受到影響)

 

*/

select dbo.fn_ACITEncryption(N,0,'123') as 解密后字符串

/*

解密后字符串

--------------------------

Roy

 

(1 個資料列受到影響)

*/