去年心血来潮,利用闲暇时间做了一个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处理后的数据不一致,请留言告知。
WebQQ hash值获取 C#方法 2014/06/20
时间: 2024-12-28 00:41:01