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

use Tempdb

go

if object_ID ( 'fn_ACITEncryption' ) is not null

    drop function fn_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 then 65535- 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 個資料列受到影響 )

*/

原文地址:https://www.cnblogs.com/Roy_88/p/5463087.html