Advertisement
AlanGomes

Untitled

Feb 1st, 2015
199
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 6.33 KB | None | 0 0
  1. <?php
  2.  /*
  3.         Está é uma classe para auxiliar na autenticação, registro do authme em seu site.
  4.         Autor: DevLeeo
  5.         Skype: DevLeeo
  6.         Email: [email protected]
  7.         Data: 21/01/2015
  8.     */
  9.  
  10. class AuthMe {
  11.  
  12.     /* TIPOS DE HASH DO AUTHME */
  13.     const MD5 = "md5";
  14.     const SHA256 = "sha256";
  15.     const SHA1 = "sha1";
  16.     const WHIRLPOOL = "whirlpool";
  17.     const MD5VB = "md5vb";
  18.     const PLAINTEXT = "plaintext";
  19.  
  20.     /* CONEXÃO DO BANCO DE DADOS. */
  21.     private $conection;
  22.  
  23.     /* NOME DA TASBELA DO AUTHME */
  24.     private $authme_table;
  25.  
  26.     /* HASH USADA */
  27.     private $algorithm;
  28.  
  29.     /* ESTA É A METODO CONSTRUTOR DA CLASSE *
  30.  
  31.        PARAMETROS
  32.        $db_host = Ip do seu banco de dados mysql;
  33.        $db_user = Nome de usuario do seu banco de dados mysql.
  34.        $db_pass = Senha do seu banco de dados mysql;
  35.        $db_name = Nome do database do mysql;
  36.        $authme_table = Nome da tabela do authme;
  37.        $algo = Tipo de hash que seu authme está utilizando;
  38.      */
  39.     public function __construct($db_host, $db_user, $db_pass, $db_name, $authme_table, $algo) {
  40.         $this->authme_table = $authme_table;
  41.         $this->algorithm = $algo;
  42.         @$this->conection = mysqli_connect($db_host, $db_user, $db_pass) or die(mysqli_connect_error());
  43.         @mysqli_select_db($this->conection, $db_name) or die(mysqli_error($this->conection));
  44.     }
  45.  
  46.     /* METODO DESTRUTOR, O CONTRARIO DO CONSTRUTOR '-' */
  47.     public function __destruct() {
  48.         if (is_object($this->conection)) {
  49.             $this->conection->close();
  50.             unset($this->algorithm);
  51.             unset($this->authme_table);
  52.         }
  53.     }
  54.  
  55.     /* METODO USADO PARA AUTENTICAR UM USUARIO
  56.  
  57.        PARAMETROS
  58.        $user = Nome de usuario.
  59.        $pass = Senha do usuario.
  60.  
  61.     */
  62.     public function authenticate($user, $pass) {
  63.         $user = addslashes($user);
  64.         $query = mysqli_query($this->conection, "SELECT * FROM ".$this->authme_table." WHERE username='".$user."' LIMIT 1;");
  65.  
  66.         if (mysqli_num_rows($query) == 1) {
  67.             $dados=mysqli_fetch_array($query);
  68.             var_dump($dados);
  69.             $hash_pass = @$dados[0]['password'];
  70.             if ($hash_pass==false || !isset($hash_pass)) {
  71.             $hash_pass = $dados[0];
  72.             }
  73.             return self::compare($pass, $hash_pass);
  74.         } else {
  75.             return false;
  76.         }
  77.  
  78.     }
  79.  
  80.     /* METODO USADO PARA REGISTRAR UM USUARIO
  81.  
  82.        PARAMETROS
  83.        $user = Nome de usuario.
  84.        $pass = Senha do usuario.
  85.        $ip = Ip do usuario.
  86.     */
  87.     public function register($user, $pass, $ip = "0.0.0.0") {
  88.         $user = addslashes($user);
  89.         $pass = addslashes(self::AMHash($pass));
  90.  
  91.         if (self::isUsernameRegistered($user)) {
  92.             return false;
  93.         }
  94.  
  95.         return mysqli_query($this->conection, "INSERT INTO {$this->authme_table} (`username`, `password`, `ip`, `lastlogin`, `x`, `y`, `z`) VALUES ('{$user}','{$pass}','{$ip}','0','0','0','0')");
  96.  
  97.     }
  98.  
  99.     /* METODO USADO PARA ALTERAR A SENHA DE UM USUARIO
  100.  
  101.        PARAMETROS
  102.        $user = Nome de usuario.
  103.        $newpass = Nova senha do usuario.
  104.  
  105.     */
  106.     public function changePassword($username, $newpass) {
  107.         if (!self::isUsernameRegistered($username)) {
  108.             return false;
  109.         }
  110.  
  111.         $username = addslashes($username);
  112.         $newpass = addslashes(self::AMHash($newpass));
  113.  
  114.         return mysqli_query($this->conection, "UPDATE {$this->authme_table} SET password='$newpass' WHERE username='$username'");
  115.     }
  116.  
  117.     /* METODO USADO PARA VERIFICAR SE UM DETERMINADO IP ESTA REGISTRADO.
  118.  
  119.        PARAMETROS
  120.        $ip = Ip que deseja verificar.
  121.    */
  122.     public function isIpRegistered($ip) {
  123.         $ip = addslashes($ip);
  124.         $query = mysqli_query($this->conection, "SELECT ip FROM {$this->authme_table} WHERE ip='{$ip}'");
  125.         return mysqli_num_rows($query) >= 1;
  126.     }
  127.  
  128.     /* METODO USADO PARA VERIFICAR SE UM DETERMINADO NOME DE USUARIO ESTA REGISTRADO.
  129.  
  130.        PARAMETROS
  131.        $user = Nome de usuario que deseja verificar.
  132.    */
  133.     public function isUsernameRegistered($user) {
  134.         $user = addslashes($user);
  135.         $query = mysqli_query($this->conection, "SELECT username FROM {$this->authme_table} WHERE username='{$user}'");
  136.         return mysqli_num_rows($query) >= 1;
  137.     }
  138.  
  139.     /* METODOS PRIVADOS, USO SOMENTA DA CLASSE. */
  140.     private function compare($pass, $hash_pass) {
  141.         switch ($this->algorithm) {
  142.  
  143.             case "sha256":
  144.                 $shainfo = explode("$", $hash_pass);
  145.                 $pass = hash("sha256", $pass).$shainfo[2];
  146.                 return strcasecmp($shainfo[3], hash('sha256', $pass)) == 0;
  147.  
  148.             case "sha1":
  149.                 return strcasecmp($hash_pass, hash('sha1', $pass)) == 0;
  150.  
  151.             case "md5":
  152.                 return strcasecmp($hash_pass, hash('md5', $pass)) == 0;
  153.  
  154.             case "whirlpool":
  155.                 return strcasecmp($hash_pass, hash('whirlpool', $pass)) == 0;
  156.  
  157.             case "md5vb":
  158.                 $shainfo = explode("$", $hash_pass);
  159.                 $pass = hash("md5", $pass).$shainfo[2];
  160.                 return strcasecmp($shainfo[3], hash('md5', $pass)) == 0;
  161.  
  162.             case "plaintext":
  163.                 return $hash_pass == $pass;
  164.  
  165.             default:
  166.                 return false;
  167.         }
  168.  
  169.     }
  170.  
  171.     private function AMHash($pass) {
  172.         switch ($this->algorithm) {
  173.  
  174.             case "sha256":
  175.                 $salt = self::createSalt();
  176.                 return "\$SHA\$".$salt."\$".hash("sha256", hash('sha256', $pass).$salt);
  177.  
  178.             case "sha1":
  179.                 return hash("sha1", $pass);
  180.  
  181.             case "md5":
  182.                 return hash("sha1", $pass);
  183.  
  184.             case "whirlpool":
  185.                 return hash("sha1", $pass);
  186.  
  187.             case "md5vb":
  188.                 $salt = self::createSalt();
  189.                 return "\$MD5vb\$".$salt."\$".hash("md5", hash('md5', $pass).$salt);
  190.  
  191.             case "plaintext":
  192.                 return $pass;
  193.  
  194.             default:
  195.                 return false;
  196.         }
  197.     }
  198.  
  199.     private function createSalt() {
  200.         $salt = "";
  201.         for ($i = 0; $i < 20; $i++) {
  202.             $salt .= rand(0, 9);
  203.         }
  204.         return substr(hash("sha1", $salt), 0, 16);
  205.     }
  206.  
  207. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement