• 腾讯webqq最新password加密算法,hash算法


    常常在做webqq机器人,可是最头痛的问题就是腾讯常常加一些验证串来防止robot,如今共享出最新的腾讯password加密算法和hash

    算法

    hash算法

    def webqq_hash(i, a):
        if isinstance(i, (str, unicode)):
            i = int(i)
        class b:
            def __init__(self, _b, i):
                self.s = _b or 0
                self.e = i or 0
    
        r = [i >> 24 & 255, i >> 16 & 255, i >> 8 & 255, i & 255]
    
        j = [ord(_a) for _a in a]
    
        e = [b(0, len(j) - 1)]
        while len(e) > 0:
            c = e.pop()
            if not (c.s >= c.e or c.s < 0 or c.e > len(j)):
                if c.s+1 == c.e:
                    if (j[c.s] > j[c.e]) :
                        l = j[c.s]
                        j[c.s] = j[c.e]
                        j[c.e] = l
                else:
                    l = c.s
                    J = c.e
                    f=j[c.s]
                    while c.s < c.e:
                        while c.s < c.e and j[c.e]>=f:
                            c.e -= 1
                            r[0] = r[0] + 3&255
    
                        if c.s < c.e:
                            j[c.s] = j[c.e]
                            c.s += 1
                            r[1] = r[1] * 13 + 43 & 255
    
                        while c.s < c.e and j[c.s] <= f:
                            c.s += 1
                            r[2] = r[2] - 3 & 255
    
                        if c.s < c.e:
                            j[c.e] = j[c.s]
                            c.e -= 1
                            r[3] = (r[0] ^ r[1]^r[2]^r[3]+1) & 255
                    j[c.s] = f
                    e.append(b(l, c.s-1))
                    e.append(b(c.s + 1, J))
        j = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A",
             "B", "C", "D", "E", "F"]
        e = ""
        for c in range(len(r)):
            e += j[r[c]>>4&15]
            e += j[r[c]&15]
    
        return e
    
    
    def newhash(b,j):
        a=j+"password error"
        i=""
        E=[]
        while True:
            if len(i)<=len(a):
                i+=b
                if len(i)==len(a):
                    break
            else:
                i=i[0:len(a)]
                break
        for c in range(len(i)):
            E.append(ord(str(i[c]))^ord(str(a[c])))
        a = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"]
        i = ""
        for c in range(len(E)):
            i+=a[E[c] >> 4 & 15]
            i+= a[E[c] & 15]
        return i

    这个算法加密出的串是获取好友列表和群列表都须要的

    password加密算法

    #md5加密函数
        def PCMd5(self,s):
            h=hashlib.md5()
            h.update(s)
            return h.hexdigest()
        #16进制转字符
        def hex2asc(self,s):
            _str="".join(s.split(r'x'))
            length=len(_str)
            data=''
            for i in range(0,length,2):
                data+=chr(int(_str[i:i+2],16))
            return data
     #密码加密函数
        '''
        v1 是 ptui_checkVC('0','!LJV','x00x00x00x00x00xa1x92x12') 第一个參数
        V2 是 ptui_checkVC('0','!LJV','x00x00x00x00x00xa1x92x12') 第二个
        '''
        def PasswordSecret(self,password,v1,v2,md5=True):
            if md5==True:
                password=self.PCMd5(password).upper()
            length=len(password)
            temp=''
            for i in range(0,length,2):
                temp+=r'x'+password[i:i+2]
            return self.PCMd5(self.PCMd5(self.hex2asc(temp)+self.hex2asc(v2)).upper()+v1).upper()
    



     

  • 相关阅读:
    jQuery learning
    【转】PHP技巧汇总:提高PHP性能的53个技巧
    [转]浅谈JavaScript编程
    英语常用口语
    中文数字转换为阿拉伯数字
    [ASP.NET MVC 3.0]JsonValueProviderFactory讓Action接收Json更輕鬆
    xapian_binaries
    查询sql数据库中的所有表和表描述
    scrollTop获取不到值的解决方法
    iframe操作ie,firefox兼容
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/3857237.html
Copyright © 2020-2023  润新知