--SQL SERVER 本身也提代加密密码的函数:
--pwdencrypt ,pwdcompare
--加密:
declare @logintable table(username varchar(20),passwd varbinary(256))
insert @logintable(username,passwd) values('yourname',pwdencrypt('123456'))declare @pwd varbinary(256)select @pwd=passwd from @logintable where username='yourname'
--比较:
if pwdcompare('12356',@pwd)=1
print 'true'
else
print 'false'select * from @logintable
--pwdencrypt ,pwdcompare
--加密:
declare @logintable table(username varchar(20),passwd varbinary(256))
insert @logintable(username,passwd) values('yourname',pwdencrypt('123456'))declare @pwd varbinary(256)select @pwd=passwd from @logintable where username='yourname'
--比较:
if pwdcompare('12356',@pwd)=1
print 'true'
else
print 'false'select * from @logintable
Public Function EnCrypt(EnStr As String) As String
Dim i As Integer
Dim S As String
For i = 1 To Len(EnStr)
S = S + Chr(158 - Asc(Mid(EnStr, i, 1)))
Next
EnCrypt = S
End Function
现在我急需在SQL SERVER中用存储过程实现,请赐教!
@str 为加/解密的字符串
@pwdstr 为加/解密字符串的密钥
*/
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_jmstr]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[f_jmstr]
GOcreate function f_jmstr(@str varchar(8000),@pwdstr varchar(8000))
returns varchar(8000)
As
begin
declare @re varchar(8000)
declare @i int
select @i=len(@str),@re=''
while len(@pwdstr)<@i
set @pwdstr=@pwdstr+'123'+@pwdstr
while @i>0
select @re=
nchar(unicode(substring(@str,@i,1))^unicode(substring(@pwdstr,@i,1)))
+@re
,@i=@i-1 return(@re)
end
go
drop function [dbo].[EnCrypt]
GOcreate function EnCrypt(@str varchar(8000))
returns varchar(8000)
As
begin
declare @re varchar(8000)
declare @i int
select @i=len(@str),@re=''
while @i>0
select @re=
nchar(158-unicode(substring(@str,@i,1)))
+@re
,@i=@i-1 return(@re)
end
go
select dbo.f_jmstr(dbo.f_jmstr('abc','密钥'),'密钥')
的结果是:abc--楼主的那段代码改写的加密函数,需要另行写解密函数.而且,不能处理汉字.