Function passEncode(byval strPass,byval strKey)
Dim priI,passLen,keyLen,numPos,chrT,aryPass()
passLen=Len(strPass)
keyLen=Len(strKey)
ReDim aryPass(passLen-1)
for priI=1 to passLen
aryPass(priI-1)=Mid(strPass,priI,1)
next
for priI=1 to passLen - 1
numPos=Asc(Mid(strKey,(priI mod keyLen)+1,1)) Mod (passLen-priI) + priI
chrT=aryPass(priI-1)
aryPass(priI-1)=aryPass(numPos)
aryPass(numPos)=chrT
next
passEncode=join(aryPass,"")
End Function
这是给已经MD5加密过的密码进行再加密的函数,我用C#写出来是下面这样,可是有错误,请大侠们帮帮忙看看该怎么改?
public static string pwdEncode(string pwd, string key)
{
int passLen = pwd.Length;
int keyLen = key.Length;
string[] aryPass = new string[passLen + 1];
for (int i = 1; i < passLen + 1; i++)
{
aryPass[i - 1] = pwd.Substring(i, 1);
}
for (int i = 1; i < passLen; i++)
{
int numPos = Convert.ToInt32(pwd.Substring((i % keyLen) + 1, 1)[0]) % (passLen - i) + i;
string chrT = aryPass[i - 1];
aryPass[i - 1] = aryPass[numPos];
aryPass[numPos] = chrT;
}
string a = "";
foreach (string t in aryPass)
{
a += t;
}
return a;
}
提示说aryPass[i - 1] = pwd.Substring(i, 1);这一行“索引和长度必须引用该字符串内的位置”。我知道确实是索引太大了,可是原来的VB中对应的那句好像也越界了啊?请大家帮帮忙吧!
Dim priI,passLen,keyLen,numPos,chrT,aryPass()
passLen=Len(strPass)
keyLen=Len(strKey)
ReDim aryPass(passLen-1)
for priI=1 to passLen
aryPass(priI-1)=Mid(strPass,priI,1)
next
for priI=1 to passLen - 1
numPos=Asc(Mid(strKey,(priI mod keyLen)+1,1)) Mod (passLen-priI) + priI
chrT=aryPass(priI-1)
aryPass(priI-1)=aryPass(numPos)
aryPass(numPos)=chrT
next
passEncode=join(aryPass,"")
End Function
这是给已经MD5加密过的密码进行再加密的函数,我用C#写出来是下面这样,可是有错误,请大侠们帮帮忙看看该怎么改?
public static string pwdEncode(string pwd, string key)
{
int passLen = pwd.Length;
int keyLen = key.Length;
string[] aryPass = new string[passLen + 1];
for (int i = 1; i < passLen + 1; i++)
{
aryPass[i - 1] = pwd.Substring(i, 1);
}
for (int i = 1; i < passLen; i++)
{
int numPos = Convert.ToInt32(pwd.Substring((i % keyLen) + 1, 1)[0]) % (passLen - i) + i;
string chrT = aryPass[i - 1];
aryPass[i - 1] = aryPass[numPos];
aryPass[numPos] = chrT;
}
string a = "";
foreach (string t in aryPass)
{
a += t;
}
return a;
}
提示说aryPass[i - 1] = pwd.Substring(i, 1);这一行“索引和长度必须引用该字符串内的位置”。我知道确实是索引太大了,可是原来的VB中对应的那句好像也越界了啊?请大家帮帮忙吧!
ReDim aryPass(passLen-1)
c#
string[] aryPass = new string[passLen + 1];
为什么c#是+1呢??
{
int passLen = pwd.Length;
int keyLen = key.Length;
string[] aryPass = new string[passLen];
for (int i = 1; i < passLen; i++)
{
aryPass[i - 1] = pwd.Substring(i, 1);
}
for (int i = 1; i < passLen - 1; i++)
{
int numPos = Convert.ToInt32(pwd.Substring((i % keyLen) + 1, 1)[0]) % (passLen - i) + i;
string chrT = aryPass[i - 1];
aryPass[i - 1] = aryPass[numPos];
aryPass[numPos] = chrT;
}
string a = "";
foreach (string t in aryPass)
{
a += t;
}
return a;
}
失误失误,换成了这个,可是加密之后的结果不一样,不知道是啥问题。。
409513进行加密,结果应该是:fb757482a310c3fa73c4e5184
可是得到的结果是:FFAA7270E4513B43808F30BD574CC7A
正在研究中……希望高手们多指点一下~~
String passEncode(ref String strPass, ref String strKey)
{
int priI, passLen, keyLen, numPos, chrT;
passLen = strPass.Length;
keyLen = strKey.Length;
Char[] aryPass = strPass.ToCharArray();
for (priI = 1; priI < passLen; priI++)
{
numPos = strKey[(priI % keyLen) + 1] % (passLen - priI) + priI;
chrT = aryPass[priI - 1];
aryPass[priI - 1] = aryPass[numPos];
aryPass[numPos] = (Char)chrT;
} String S = String.Empty; foreach (Char C in aryPass)
S += C.ToString();
return S;
}
楼上代码提示:索引超出了数组界限。
还有就是更正一下409513进行加密,结果应该是:fb757482a310c3fa73c4e5184dba070f
可是得到的结果是:FFAA7270E4513B43808F30BD574CC7A
额..
正常了,出来的结果是:
FB757482A310C3FA73C4E5184DBA07F0
可是想要的结果是:
fb757482a310c3fa73c4e5184dba070f
就是最后的2个字母,不知道为什么,位置换了,继续研究,完了给分~~