教你怎樣實現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 個資料列受到影響 )
*/