海运的博客

PHP版本QQ密码及g_tk算法

发布时间:November 7, 2014 // 分类:PHP // No Comments

<?php
   function hexchar2bin($str)
   {
      $arr = '';
      $temp = null;
      for ($i = 0; $i < strlen($str); $i = $i + 2) {
         $arr .= "\\x" . substr($str, $i, 2);
      }
      eval('$temp="' . $arr . '";');
      return $temp;
   }

   function getUid($uid)
   {
      $temp = null;
      eval('$temp="' . $uid . '";');
      return $temp;
   }
   function getEncryption($password, $uin, $vcode)
   {
      $uin = getUid($uin);
      $str1 = hexchar2bin(strtoupper(md5($password)));
      $str2 = strtoupper(md5($str1 . $uin));
      return strtoupper(md5($str2 . strtoupper($vcode)));
   }
   //print_r(getEncryption('chen123','\x00\x00\x00\x00\xba\xaf\x34\x87','!GMO'));

   function utf8_unicode($c)
   {
      switch (strlen($c)) {
         case 1:
         return ord($c);
         case 2:
         $n = (ord($c[0]) & 0x3f) << 6;
         $n += ord($c[1]) & 0x3f;
         return $n;
         case 3:
         $n = (ord($c[0]) & 0x1f) << 12;
         $n += (ord($c[1]) & 0x3f) << 6;
         $n += ord($c[2]) & 0x3f;
         return $n;
         case 4:
         $n = (ord($c[0]) & 0x0f) << 18;
         $n += (ord($c[1]) & 0x3f) << 12;
         $n += (ord($c[2]) & 0x3f) << 6;
         $n += ord($c[3]) & 0x3f;
         return $n;
      }
   }

   function getGTK($str)
   {
      $hash = 5381;
      for ($i = 0, $len = strlen($str); $i < $len; ++$i) {
         $hash += ($hash << 5) + utf8_unicode($str[$i]);
      }
      return $hash & 2147483647;
   }
   print_r(getGTK('@LNKTSNI0F'));

另一种g_tk的算法:

<?php

function charCodeAt($str, $index)
{
  $char = mb_substr($str, $index, 1, 'UTF-8');

  if (mb_check_encoding($char, 'UTF-8'))
  {
    $ret = mb_convert_encoding($char, 'UTF-32BE', 'UTF-8');
    return hexdec(bin2hex($ret));
  }
  else
  {
    return null;
  }
}

function getGTK($str)
{
  $md5key = 'tencentQQVIP123443safde&!%^%1282';
  $salt = 5381;
  $hash = $salt << 5;
  for ($i = 0, $len = strlen($str); $i < $len; ++$i) 
  {
    $asciicode = charCodeAt($str[$i], 0);
    $hash = $hash . (($salt << 5) + $asciicode);
    $salt = $asciicode;
  }
  return md5($hash . $md5key);
}
echo getGTK('AYg8iSVJL58F4X2EHBbIT5BS');

标签:none

评论已关闭

分类
最新文章
最近回复
  • 海运: 正常情况下编译整个内核执行make menuconfig后就不会出现此提示,当单独编译单个模块...
  • oijq: 就是用的armbian的配置文件哈,按你的教程做的,在执行make LOCALVERSION=...
  • 海运: 使用armbian的配置文件,其它添加或修改自己懂的部分,不懂的就不要碰了。
  • oijq: 编译时这些选项全部选Y吗?Actions Semi Platforms (ARCH_ACTIO...
  • 海运: n1编译bbr内核模块参考这个:https://www.haiyun.me/archives/...
  • jiqz: make M=net/ipv4/ CONFIG_TCP_CONG_BBR=m modules编...
  • ruralhunter: 哦,文档里应该是对的,是.config
  • ruralhunter: cp /mnt/boot/config-4.18.7-aml-s9xxx .config这里应...
  • 海运: 你是编译不成功呢?还是编译后不能运行呢?还是运行后不能访问web界面呢?
  • 白墨: 可能不清楚就是编译安装后启动后访问不了web界面