首页 新闻 会员 周边

能给这个方法写个解密的方法吗?

0
[已关闭问题] 关闭于 2010-08-31 11:52
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;
}

 

问题补充: 能提供思路更好,另关于这个方法是可逆的还是不可逆的有什么判断依据没? 不要说写不出来就是不可逆的。。。呵呵
like%'远远'%的主页 like%'远远'% | 小虾三级 | 园豆:635
提问于:2010-08-17 14:29
< >
分享
所有回答(3)
0

不可逆

1:j的数值,if j=20 or j=520  最终 j都是 520 就是说如果j=520 就没有办法退出时20 还是520

2:取余数的问题,是不可逆的!

其他还没有发现,有一点就表示不可逆

无意创新 | 园豆:240 (菜鸟二级) | 2010-08-18 16:06
0

兄弟就取余就有好些情况了。

Astar | 园豆:40805 (高人七级) | 2010-08-18 16:18
0

应该是可逆的,但是有点复杂。

首先,算法中的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”。

虽然还是很乱。但起码说明一点,它是可逆的。因为它有规律。

邢少 | 园豆:10926 (专家六级) | 2010-08-18 16:39
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册