从pb中取了一段用户密码加密解密的代码练习,加密部分正常,解密不能得到正确值,请大家帮忙分析下,以下是代码
/*加密*/
create procedure encrypt @as_passwd varchar(50)
as
begindeclare @li_char integer
declare @li_base integer
declare @li_i integer
declare @ls_passwd varchar(50)
declare @ls_str varchar(50)
declare @ls_char varcharset @ls_str = @as_passwd + space(49 - len(@as_passwd))
set @ls_passwd = ''
set @li_base = 125
set @ls_char = substring(@ls_str,1,1)
set @li_char = ascii(@ls_char) + @li_base
set @ls_passwd = @ls_passwd + char(@li_char)
set @li_i = 2while ( @li_i < 50 )
begin
set @ls_char = substring(@ls_str,@li_i,1)
set @li_char = ascii(@ls_char) + @li_base + @li_i - @li_i * 2
set @ls_passwd = @ls_passwd + char(@li_char)
        set @li_i = @li_i +1
end
select @ls_passwd
end/*解密*/
create procedure dencrypt @as_passwd varchar(50)
as
begindeclare @li_char integer
declare @li_base integer
declare @li_i integer
declare @ls_passwd varchar(50)
declare @ls_str varchar(50)
declare @ls_char varchar(2)/*定义成char和varchar得到的值都为'null'*/set @ls_str = @as_passwd
set @ls_passwd = ''
set @li_base = 125
set @ls_char = substring(@ls_str,1,1)
set @li_i = 2set @li_char = ascii(@ls_char) - @li_base
set @ls_passwd = @ls_passwd + char(@li_char)while ( @li_i < 50 )
begin
set @ls_char = substring(@ls_str,@li_i,1)
set @li_char = ascii(@ls_char) - (@li_base + @li_i) + @li_i * 2
set @ls_passwd = @ls_passwd + char(@li_char)
        set @li_i = @li_i + 1
end
set @ls_passwd = rtrim(@ls_passwd)
select @ls_passwdend
加密测试使用字符串‘135246’,从调试窗口看加密后前六位的值为‘174,174,175,171,172,173’
但是使用解密过程却得到‘142’+其他字符,取已加密字符串前六位为‘174,175,172,150,148,146’(好像是将加密字符串作为中文字符来取,取了双字节)
各位大侠给指点下,怎么才能得到正确的字符串,谢谢!