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 個資料列受到影響)
*/