当前位置: 代码迷 >> PB >> 相同的解密函数PB8.0上可以使用,可PB11.5上使用得到乱码
  详细解决方案

相同的解密函数PB8.0上可以使用,可PB11.5上使用得到乱码

热度:101   发布时间:2016-04-29 07:42:16.0
相同的解密函数PB8.0下可以使用,可PB11.5下使用得到乱码?
如:我设置的密码是:123456
用系统函数uf_encode加密后为:0921411446549214865492152
可是我再用uf_decode解密后却得到:12?????   
为什么会乱码呢?我在PB8.0是可以的呀?


加密函数uf_encode如下:
long li_char, li_base, li_i, li_asc
string ls_passwd, ls_str, ls_char
string ls_transpwd

if IsNull(arg_passwd) or arg_passwd = "" then
return arg_passwd
end if

ls_str = arg_passwd
ls_passwd = ""

li_base = this.uf_getbase(arg_passwd) // 取得编码的基码

ls_passwd = Char(li_base) // 设定基码

ls_char = Mid(ls_str, 1, 1) // 取的密码的第一个字元的 ascii code
li_char = Asc(ls_char) + li_base // 加上基码
ls_passwd = ls_passwd + Char(li_char)

for li_i = 2 to Len(ls_str)
  // 依序将密码转换
ls_char = Mid(ls_str, li_i, 1)
if Mod(li_i, 2) = 0 then
  li_char = Asc(ls_char) + (li_base + li_i )
else
li_char = Asc(ls_char) - (li_base + li_i )
end if
  ls_passwd = ls_passwd + Char(li_char)
next

for li_i = 1 to Len(ls_passwd)
li_asc = Asc(Mid(ls_passwd, li_i, 1))
  ls_transpwd += String(li_asc, "000")
next

return ls_transpwd


取编码的基码uf_transbase函数如下:
integer li_base, li_n
long ll_num

li_n = Len(passwd)
ll_num = 0

for li_n = 1 to Len(passwd)
ll_num += Asc(Mid(passwd, li_n, 1))
next

//li_base = 57 + ll_num / Len(passwd)

li_base = 32 + Mod(Second(Now()), 10) + (ll_num / Len(passwd))

return li_base



解密函数uf_decode如下:

integer li_char, li_base, li_i
string ls_passwd, ls_str, ls_char, ls_basestr, ls_transpwd
string ls_codestr

if Match(arg_passwd, "[A-Za-z]") then
return arg_passwd
end if

ls_str = arg_passwd
ls_passwd = ""

li_base = this.uf_transbase(Mid(ls_str, 1, 3)) // 取得编码的基码

for li_i = 2 to Len(ls_str) / 3
ls_codestr = Mid(ls_str, ((li_i -1) * 3) + 1, 3)
  ls_transpwd = ls_transpwd + Char(Integer(ls_codestr))
next

ls_char = Mid(ls_transpwd, 1, 1) // 取的密码的第一个字元的 ascii code
li_char = Asc(ls_char) - li_base // 减掉基码
ls_passwd = ls_passwd + Char(li_char) // 记录密码

for li_i = 2 to Len(ls_transpwd)
// 依序将密码转换
ls_char = Mid(ls_transpwd, li_i, 1)
// if Mod(li_i, 2) = 0 then
  li_char = Asc(ls_char) - (li_base )
// else
// li_char = Asc(ls_char) + (li_base )
// end if
  ls_passwd = ls_passwd + Char(li_char)   
next

ls_passwd = RightTrim(ls_passwd) // 去掉右边空白字元

return ls_passwd


取编码的基码uf_transbase函数如下:
integer li_base

li_base = Integer(basestr)
  相关解决方案