字符串问题

lizhi0518 2008-06-24 04:54:29
从pb中取了一段用户密码加密解密的代码练习,加密部分正常,解密不能得到正确值,请大家帮忙分析下,以下是代码
/*加密*/
create procedure encrypt @as_passwd varchar(50)
as
begin

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

set @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 = 2

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
select @ls_passwd
end

/*解密*/
create procedure dencrypt @as_passwd varchar(50)
as
begin

declare @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 = 2

set @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_passwd

end


加密测试使用字符串‘135246’,从调试窗口看加密后前六位的值为‘174,174,175,171,172,173’
但是使用解密过程却得到‘142’+其他字符,取已加密字符串前六位为‘174,175,172,150,148,146’(好像是将加密字符串作为中文字符来取,取了双字节)
各位大侠给指点下,怎么才能得到正确的字符串,谢谢!
...全文
90 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lizhi0518 2008-06-26
  • 打赏
  • 举报
回复
分不能给自己,回复了的一人分一点吧,不要嫌少啊:)
hanjs 2008-06-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 duanzhi1984 的回复:]
jf

恭喜
[/Quote]
duanzhi1984 2008-06-25
  • 打赏
  • 举报
回复
jf

恭喜
pt1314917 2008-06-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 happyflystone 的回复:]
JF
[/Quote]
-狙击手- 2008-06-25
  • 打赏
  • 举报
回复
JF
lizhi0518 2008-06-25
  • 打赏
  • 举报
回复
搞定了,是编码规则问题,数据库用的是Chinese_PRC_CI_AS,pb默认是ascii(对应数据库是latin1_general_ci_as),用latin1_general_ci_as编码规则建了个库就ok了。

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧