public static String AddpassLock(String spass)
{
if(spass==null ||spass.equals(""))
spass="systemPassword";
String ss="";
byte[] b=spass.getBytes();
byte bt;
for(int i=0;i<b.length;i++)
{
b[i]+=(b.length-(i+9));
if(ss.equals(""))
ss=Byte.toString(b[i]);
else
ss+="-"+Byte.toString(b[i]);
}
return ss; }
{
if(spass==null ||spass.equals(""))
spass="systemPassword";
String ss="";
byte[] b=spass.getBytes();
byte bt;
for(int i=0;i<b.length;i++)
{
b[i]+=(b.length-(i+9));
if(ss.equals(""))
ss=Byte.toString(b[i]);
else
ss+="-"+Byte.toString(b[i]);
}
return ss; }
Public Function AddpassLock(Byval spass As String) As String
Dim ss As String, b() As Byte, i As Integer
If spass = "" Then spass = "systemPassword"
ss="" b = spass, For i = 0 To Ubound(b)
b(i)= b(i) + Ubound(b) - i - 9
If ss = "" Then
ss = Chr(b(i))
else
ss = ss & "-" & Chr((b(i))
End If
Next i
AddpassLock = ssEnd Function
b(i)= b(i) + Ubound(b) - i - 9.length是数组的长度,不是上界
Byte.toString(b[i])
不是Chr(b(i))吧
虽然不知道是什么语言
我猜是Java的,查了下Java的API文档
果然有Byte.toString(byte b)这么个静态方法
就是转为十进制字符串那么
Byte.toString(b[i])
应该是CStr(b(i))吧,或者直接连接到字符串,自动转换
先用CByte转换一下
Function jian(tempstr)
if tempstr <> "" then
dim s_r,ss,str(),b(),d_i
s_r=""
ss=Split(tempstr,"-")
d_i=UBound(ss)
ReDim b(d_i)
ReDim str(d_i)
for i=0 to d_i b(i)=CByte(ss(i))
Next
for i=0 to d_i
b(i)= b(i)-(d_i+1-(i+9))
str(i)=Chr(b(i))
Next
jian=Join(str)
else
Response.redirect "err.htm"
end if
end Function
也就是说那段代码返回的值在这段asp里的代码还原
你能保证都是单字节字符吗?那么
b = spass
这一句应改为
b = strconv(spass,vbFromUnicode)
Encodes this String into a sequence of bytes using the platform's default charset, storing the result into a new byte array
byte[] b=spass.getBytes();
Byte.toString
两处碰到问题,第一个猜对了,保留为0的字节没意义
第二个我写的是转为十六进制字符串
吃不准,所以没敢贴出来,再看,已被抢先了,呵呵