asp加密请教高手!

来源:百度知道 编辑:UC知道 时间:2024/04/28 16:05:58
关于asp字段加密算法的问题....
加密算法如下:
Function convpwd(str)
str1=""
strlen=len(str)
for i=1 to strlen
ch=Mid(str,i,1)
str1=str1&chr(asc(ch)*2-strlen)
next
convpwd=str1
End Function
为此,我设计出解密算法如下
Function deconvpwd(str)
str1=""
strlen=len(str)
for i=1 to strlen
ch=Mid(str,i,1)
str1=str1&chr((asc(ch)+strlen)/2)
next
deconvpwd=str1
End Function
然后,我再作检验如下:
if convpwd(deconvpwd(rs1("pswd")))=rs1("pswd") then
Response.Write("<br>   <br>校验成功")
Else
Response.Write("<br>   <br>校验失败")
end if
*注:rs1("pswd")为已加密字段.
结果当字段全为数字时校验成功,当有英文字母时就校验失败,请教高手

经试验,发现如果
字符串比较长,其中即使含有英文字母(如大写的A)时,也可以校验成功!
小写则全部不行!

再分析:
你的解密是完全反向逆运算的,逻辑上没有问题,然而
加密方法就不合理!

str1=str1&chr(asc(ch)*2-strlen)
这一行中,如果asc(ch)*2-strlen比128大就不正常了

标准的ASC和CHR运算
不支持扩展ASCII编码,只支持1-127

查查,数字符号、大写字母、小写字母的ASCII是多少,顺序如何?
你会编程的,不用多说了。
再试试?

if convpwd(deconvpwd(rs1("pswd")))=rs1("pswd") then
这里是不是少了个 "="号?

楼上的好快,呵呵,已经说出原因来了。
我做了一个测试用的程序,可以给你看一下结果:
这个是测试程序:

'这个是你提供的加密函数
Function convpwd(str)
str1=""
strlen=len(str)
for i=1 to strlen
ch=Mid(str,i,1)
str1=str1&chr(asc(ch)*2-strlen)
next
convpwd=str1
End Function

'showInAsc函数是用来将字符串以ascii格式显示的
Function showInAsc(str)
For i = 1 To Len(str)
showInAsc=showInAsc & "--" & AscW(Mid(str,i,1))
Next
End function

s="123Aabc"
s2=convpwd(s)