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