如何实现对数据库单个字段进行加密
<br> create view v_rand<br> as<br> select c=unicode(cast(round(rand()*255,0) as tinyint))<br> go<br> create function f_jmstr(@str varchar(8000),@type bit)returns varchar(8000)<br> /*<br> <br> *参数说明<br> *str:要加密的字符串或已经加密后的字符<br> *type:操作类型--0加密--解密<br> *返回值说明<br> *当操作类型为加密时(type--0):返回为加密后的str,即存放于数据库中的字符串<br> *当操作类型为解密时(type--1):返回为实际字符串,即加密字符串解密后的原来字符串<br> */<br> As<br> begin<br> declare @re varchar(8000)--返回值<br> declare @c int--加密字符<br> declare @i int<br> /*<br> *加密方法为原字符异或一个随机ASCII字符<br> */<br> if @type=0--加密<br> begin<br> select @c=c,@re='',@i=len(@str) from v_rand<br> while @i>0<br> select @re=nchar(unicode(substring(@str,@i,1))^@c^@i) @re<br> ,@i=@i-1<br> set @re=@re nchar(@c)<br> end<br> else--解密<br> begin<br> select @i=len(@str)-1,@c=unicode(substring(@str,@i 1,1)),@re=''<br> while @i>0<br> select @re=nchar(unicode(substring(@str,@i,1))^@c^@i) @re ,@i=@i-1<br> end<br> return(@re)<br> end<br> go<br> <br> --测试<br> declare @tempstr varchar(20)<br> set @tempstr=' 1 2 3aA'<br> select dbo.f_jmstr(dbo.f_jmstr(@tempstr,0),1)<br> 输出结果<br> 1 2 3aA<br> <br> (完) <
页:
[1]