public static string _HashPassword(string PassWord)
{
string Result = "";
string tmpStr1, tmpStr2, tmpStr3;
int j;
if (!string.IsNullOrEmpty(PassWord))
for (int i = 0; i < PassWord.Length; i++)
{
tmpStr1 = PassWord.Substring(i, 1);
j = (int)Convert.ToChar(tmpStr1) * 13;
if (j < 500)
{
j += 500;
}
tmpStr2 = j.ToString("X");//转化为16进制
int intmod = 2 - (i % 2);
tmpStr3 = tmpStr2.Substring(0, intmod);
tmpStr2 = tmpStr2.Substring(1, tmpStr2.Length - intmod);
Result = tmpStr2 + Result + tmpStr3;
}
return Result;
}
不可逆
1:j的数值,if j=20 or j=520 最终 j都是 520 就是说如果j=520 就没有办法退出时20 还是520
2:取余数的问题,是不可逆的!
其他还没有发现,有一点就表示不可逆
兄弟就取余就有好些情况了。
应该是可逆的,但是有点复杂。
首先,算法中的int intmod = 2 - (i % 2);的结果无外呼就是1和2,而且它的出现是有规律的。i>2后的情况下是1、2轮换出现的。
至于 Result = tmpStr2 + Result + tmpStr3 相当于
Result = tmpStr2.Substring(1, tmpStr2.Length - intmod) + Result + tmpStr2.Substring(0, intmod);。其实就是密码长度循环中。每次为前一个加个头和尾。
例子 : 第一次循环“ 头+result+尾” 下一次就是 :“头2+1头+result+尾1+尾2”。
虽然还是很乱。但起码说明一点,它是可逆的。因为它有规律。