去年心血来潮,利用闲暇时间做了一个WebQQ的桌面软件,基本功能实现之后,就放那儿了。webQQ的协议时常更新,导致有些参数加密的方法要跟着更新,今天群里一朋友提供了一份最新的WebQQ hash的js,我转成了C#的方法,记在这里,希望对正在做webqq的朋友有所帮助。
js方法
p=getqqhsahs(b,j) {
for (var a = j + "password error",
i = "",
E = [];;) if (i.length <= a.length) {
if (i += b, i.length == a.length) break
} else {
i = i.slice(0, a.length);
break
}
for (var c = 0; c < i.length; c++) E[c] = i.charCodeAt(c) ^ a.charCodeAt(c);
a = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"];
i = "";
for (c = 0; c < E.length; c++) i += a[E[c] >> 4 & 15],
i += a[E[c] & 15];
return i
}
转成C#方法
public string GetHash(uint b, string j)
{
var a = j + "password error";
var i = "";
var E = new List<int>();
while (true)
{
if (i.Length <= a.Length)
{
i += b;
if (i.Length == a.Length)
break;
}
else
{
i = i.Substring(0, a.Length);
break;
}
}
char[] ichars = i.ToCharArray();
char[] achars = a.ToCharArray();
for (var c = 0; c < i.Length; c++)
E.Add(((int)ichars[c] ^ (int)achars[c]));
string[] a1 = new string[] { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F" };
i = "";
for (var c = 0; c < E.Count; c++)
{
i += a1[(int)E[c] >> 4 & 15];
i += a1[(int)E[c] & 15];
}
return i;
}
代码的返回数据已经和js进行了对比,可以使用; 由于我自己的webQQ很久没有更新,这个方法没有在webqq项目中测试;使用中有遇到和js处理后的数据不一致,请留言告知。
注:转载请注明,谢谢