中国龙 发表于 2008-12-14 11:27:07

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

<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]
查看完整版本: 如何实现对数据库单个字段进行加密