AlanGomes

Untitled

Feb 1st, 2015
227
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 6.31 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.             $hash_pass = @$dados[0]['password'];
  69.             if ($hash_pass==false || !isset($hash_pass)) {
  70.             $hash_pass = $dados[0];
  71.             }
  72.             return self::compare($pass, $hash_pass);
  73.         } else {
  74.             return false;
  75.         }
  76.  
  77.     }
  78.  
  79.     /* METODO USADO PARA REGISTRAR UM USUARIO
  80.  
  81.        PARAMETROS
  82.        $user = Nome de usuario.
  83.        $pass = Senha do usuario.
  84.        $ip = Ip do usuario.
  85.     */
  86.     public function register($user, $pass, $ip = "0.0.0.0") {
  87.         $user = addslashes($user);
  88.         $pass = addslashes(self::AMHash($pass));
  89.  
  90.         if (self::isUsernameRegistered($user)) {
  91.             return false;
  92.         }
  93.  
  94.         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')");
  95.  
  96.     }
  97.  
  98.     /* METODO USADO PARA ALTERAR A SENHA DE UM USUARIO
  99.  
  100.        PARAMETROS
  101.        $user = Nome de usuario.
  102.        $newpass = Nova senha do usuario.
  103.  
  104.     */
  105.     public function changePassword($username, $newpass) {
  106.         if (!self::isUsernameRegistered($username)) {
  107.             return false;
  108.         }
  109.  
  110.         $username = addslashes($username);
  111.         $newpass = addslashes(self::AMHash($newpass));
  112.  
  113.         return mysqli_query($this->conection, "UPDATE {$this->authme_table} SET password='$newpass' WHERE username='$username'");
  114.     }
  115.  
  116.     /* METODO USADO PARA VERIFICAR SE UM DETERMINADO IP ESTA REGISTRADO.
  117.  
  118.        PARAMETROS
  119.        $ip = Ip que deseja verificar.
  120.    */
  121.     public function isIpRegistered($ip) {
  122.         $ip = addslashes($ip);
  123.         $query = mysqli_query($this->conection, "SELECT ip FROM {$this->authme_table} WHERE ip='{$ip}'");
  124.         return mysqli_num_rows($query) >= 1;
  125.     }
  126.  
  127.     /* METODO USADO PARA VERIFICAR SE UM DETERMINADO NOME DE USUARIO ESTA REGISTRADO.
  128.  
  129.        PARAMETROS
  130.        $user = Nome de usuario que deseja verificar.
  131.    */
  132.     public function isUsernameRegistered($user) {
  133.         $user = addslashes($user);
  134.         $query = mysqli_query($this->conection, "SELECT username FROM {$this->authme_table} WHERE username='{$user}'");
  135.         return mysqli_num_rows($query) >= 1;
  136.     }
  137.  
  138.     /* METODOS PRIVADOS, USO SOMENTA DA CLASSE. */
  139.     private function compare($pass, $hash_pass) {
  140.         switch ($this->algorithm) {
  141.  
  142.             case "sha256":
  143.                 $shainfo = explode("$", $hash_pass);
  144.                 $pass = hash("sha256", $pass).$shainfo[2];
  145.                 return strcasecmp($shainfo[3], hash('sha256', $pass)) == 0;
  146.  
  147.             case "sha1":
  148.                 return strcasecmp($hash_pass, hash('sha1', $pass)) == 0;
  149.  
  150.             case "md5":
  151.                 return strcasecmp($hash_pass, hash('md5', $pass)) == 0;
  152.  
  153.             case "whirlpool":
  154.                 return strcasecmp($hash_pass, hash('whirlpool', $pass)) == 0;
  155.  
  156.             case "md5vb":
  157.                 $shainfo = explode("$", $hash_pass);
  158.                 $pass = hash("md5", $pass).$shainfo[2];
  159.                 return strcasecmp($shainfo[3], hash('md5', $pass)) == 0;
  160.  
  161.             case "plaintext":
  162.                 return $hash_pass == $pass;
  163.  
  164.             default:
  165.                 return false;
  166.         }
  167.  
  168.     }
  169.  
  170.     private function AMHash($pass) {
  171.         switch ($this->algorithm) {
  172.  
  173.             case "sha256":
  174.                 $salt = self::createSalt();
  175.                 return "\$SHA\$".$salt."\$".hash("sha256", hash('sha256', $pass).$salt);
  176.  
  177.             case "sha1":
  178.                 return hash("sha1", $pass);
  179.  
  180.             case "md5":
  181.                 return hash("sha1", $pass);
  182.  
  183.             case "whirlpool":
  184.                 return hash("sha1", $pass);
  185.  
  186.             case "md5vb":
  187.                 $salt = self::createSalt();
  188.                 return "\$MD5vb\$".$salt."\$".hash("md5", hash('md5', $pass).$salt);
  189.  
  190.             case "plaintext":
  191.                 return $pass;
  192.  
  193.             default:
  194.                 return false;
  195.         }
  196.     }
  197.  
  198.     private function createSalt() {
  199.         $salt = "";
  200.         for ($i = 0; $i < 20; $i++) {
  201.             $salt .= rand(0, 9);
  202.         }
  203.         return substr(hash("sha1", $salt), 0, 16);
  204.     }
  205.  
  206. }
Advertisement
Add Comment
Please, Sign In to add comment