如何实现对数据库单个字段进行加密

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

create view v_rand

as

select c=unicode(cast(round(rand()*255,0) as tinyint))

go

create function f_jmstr(@str varchar(8000),@type bit)returns varchar(8000)

/*

*参数说明

*str:要加密的字符串或已经加密后的字符

*type:操作类型--0加密--解密

*返回值说明

*当操作类型为加密时(type--0):返回为加密后的str,即存放于数据库中的字符串

*当操作类型为解密时(type--1):返回为实际字符串,即加密字符串解密后的原来字符串

*/

As

begin

declare @re varchar(8000)--返回值

declare @c int--加密字符

declare @i int

/*

*加密方法为原字符异或一个随机ASCII字符

*/

if @type=0--加密

begin

select @c=c,@re='',@i=len(@str) from v_rand

while @i>0

select @re=nchar(unicode(substring(@str,@i,1))^@c^@i)+@re

,@i=@i-1

set @re=@re+nchar(@c)

end

else--解密

begin

select @i=len(@str)-1,@c=unicode(substring(@str,@i+1,1)),@re=''

while @i>0

select @re=nchar(unicode(substring(@str,@i,1))^@c^@i)+@re ,@i=@i-1

end

return(@re)

end

go

--测试

declare @tempstr varchar(20)

set @tempstr=' 1 2 3aA'

select dbo.f_jmstr(dbo.f_jmstr(@tempstr,0),1)

输出结果

1 2 3aA

(完)

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航