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

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

(完)

Published At
Categories with 数据库类
Tagged with
comments powered by Disqus