AlanGomes

Untitled

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