--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

解决方案 »

  1.   

    我不是需要SQL SERVER中的加密函数,我需要的加密算法是
    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中用存储过程实现,请赐教!
      

  2.   

    --还是自己写函数实现比较好,SQL自己的那个不能解密/*--加/解密字符串
    @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
      

  3.   

    --将楼主的那段修改为SQL中的加密函数if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[EnCrypt]') and xtype in (N'FN', N'IF', N'TF'))
    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
      

  4.   

    --我的加密函数,调用一次,是进行加密,用同样的密码再调用一次,就是解密即:
    select dbo.f_jmstr(dbo.f_jmstr('abc','密钥'),'密钥')
    的结果是:abc--楼主的那段代码改写的加密函数,需要另行写解密函数.而且,不能处理汉字.