2016-02-12 18 views
6

Tôi đang cố gắng tải trình trợ giúp Phpass trong bộ điều khiển cơ sở của mình để băm mật khẩu của mình. Tuy nhiên, nó dường như không tải trên Ubuntu 14.04. Tôi đã cố gắng để tìm kiếm và một số người nói nó có lẽ vì Linux là trường hợp nhạy cảm, vì vậy tôi đã thay đổi tập tin của tôi từ phpass_helper.php sang Phpass_helper.php. và tải nó bằng cách sử dụng mã bên dưới:Codeigntier: Không thể tải tệp được yêu cầu: helpers/phpass_helper.php trên Ubuntu 14.04

$this->load->helper('Phpass_helper'); 

nhưng vẫn cho tôi lỗi: Không thể tải tệp được yêu cầu: helpers/phpass_helper.php. Có ai biết tại sao nó không hoạt động? Mọi sự trợ giúp sẽ rất được trân trọng. Cảm ơn.

class PasswordHash { 
var $itoa64; 
var $iteration_count_log2; 
var $portable_hashes; 
var $random_state; 

function PasswordHash($iteration_count_log2, $portable_hashes) 
{ 
    $this->itoa64 = './ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; 

    if ($iteration_count_log2 < 4 || $iteration_count_log2 > 31) 
     $iteration_count_log2 = 8; 
    $this->iteration_count_log2 = $iteration_count_log2; 

    $this->portable_hashes = $portable_hashes; 

    $this->random_state = microtime(); 
    if (function_exists('getmypid')) 
     $this->random_state .= getmypid(); 
} 

function get_random_bytes($count) 
{ 
    $output = ''; 
    if (is_readable('/dev/urandom') && 
     ($fh = @fopen('/dev/urandom', 'rb'))) { 
     $output = fread($fh, $count); 
     fclose($fh); 
    } 

    if (strlen($output) < $count) { 
     $output = ''; 
     for ($i = 0; $i < $count; $i += 16) { 
      $this->random_state = 
       md5(microtime() . $this->random_state); 
      $output .= 
       pack('H*', md5($this->random_state)); 
     } 
     $output = substr($output, 0, $count); 
    } 

    return $output; 
} 

function encode64($input, $count) 
{ 
    $output = ''; 
    $i = 0; 
    do { 
     $value = ord($input[$i++]); 
     $output .= $this->itoa64[$value & 0x3f]; 
     if ($i < $count) 
      $value |= ord($input[$i]) << 8; 
     $output .= $this->itoa64[($value >> 6) & 0x3f]; 
     if ($i++ >= $count) 
      break; 
     if ($i < $count) 
      $value |= ord($input[$i]) << 16; 
     $output .= $this->itoa64[($value >> 12) & 0x3f]; 
     if ($i++ >= $count) 
      break; 
     $output .= $this->itoa64[($value >> 18) & 0x3f]; 
    } while ($i < $count); 

    return $output; 
} 

function gensalt_private($input) 
{ 
    $output = '$P$'; 
    $output .= $this->itoa64[min($this->iteration_count_log2 + 
     ((PHP_VERSION >= '5') ? 5 : 3), 30)]; 
    $output .= $this->encode64($input, 6); 

    return $output; 
} 

function crypt_private($password, $setting) 
{ 
    $output = '*0'; 
    if (substr($setting, 0, 2) == $output) 
     $output = '*1'; 

    $id = substr($setting, 0, 3); 
    # We use "$P$", phpBB3 uses "$H$" for the same thing 
    if ($id != '$P$' && $id != '$H$') 
     return $output; 

    $count_log2 = strpos($this->itoa64, $setting[3]); 
    if ($count_log2 < 7 || $count_log2 > 30) 
     return $output; 

    $count = 1 << $count_log2; 

    $salt = substr($setting, 4, 8); 
    if (strlen($salt) != 8) 
     return $output; 

    # We're kind of forced to use MD5 here since it's the only 
    # cryptographic primitive available in all versions of PHP 
    # currently in use. To implement our own low-level crypto 
    # in PHP would result in much worse performance and 
    # consequently in lower iteration counts and hashes that are 
    # quicker to crack (by non-PHP code). 
    if (PHP_VERSION >= '5') { 
     $hash = md5($salt . $password, TRUE); 
     do { 
      $hash = md5($hash . $password, TRUE); 
     } while (--$count); 
    } else { 
     $hash = pack('H*', md5($salt . $password)); 
     do { 
      $hash = pack('H*', md5($hash . $password)); 
     } while (--$count); 
    } 

    $output = substr($setting, 0, 12); 
    $output .= $this->encode64($hash, 16); 

    return $output; 
} 

function gensalt_extended($input) 
{ 
    $count_log2 = min($this->iteration_count_log2 + 8, 24); 
    # This should be odd to not reveal weak DES keys, and the 
    # maximum valid value is (2**24 - 1) which is odd anyway. 
    $count = (1 << $count_log2) - 1; 

    $output = '_'; 
    $output .= $this->itoa64[$count & 0x3f]; 
    $output .= $this->itoa64[($count >> 6) & 0x3f]; 
    $output .= $this->itoa64[($count >> 12) & 0x3f]; 
    $output .= $this->itoa64[($count >> 18) & 0x3f]; 

    $output .= $this->encode64($input, 3); 

    return $output; 
} 

function gensalt_blowfish($input) 
{ 
    # This one needs to use a different order of characters and a 
    # different encoding scheme from the one in encode64() above. 
    # We care because the last character in our encoded string will 
    # only represent 2 bits. While two known implementations of 
    # bcrypt will happily accept and correct a salt string which 
    # has the 4 unused bits set to non-zero, we do not want to take 
    # chances and we also do not want to waste an additional byte 
    # of entropy. 
    $itoa64 = './ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; 

    $output = '$2a$'; 
    $output .= chr(ord('0') + $this->iteration_count_log2/10); 
    $output .= chr(ord('0') + $this->iteration_count_log2 % 10); 
    $output .= '$'; 

    $i = 0; 
    do { 
     $c1 = ord($input[$i++]); 
     $output .= $itoa64[$c1 >> 2]; 
     $c1 = ($c1 & 0x03) << 4; 
     if ($i >= 16) { 
      $output .= $itoa64[$c1]; 
      break; 
     } 

     $c2 = ord($input[$i++]); 
     $c1 |= $c2 >> 4; 
     $output .= $itoa64[$c1]; 
     $c1 = ($c2 & 0x0f) << 2; 

     $c2 = ord($input[$i++]); 
     $c1 |= $c2 >> 6; 
     $output .= $itoa64[$c1]; 
     $output .= $itoa64[$c2 & 0x3f]; 
    } while (1); 

    return $output; 
} 

function HashPassword($password) 
{ 
    $random = ''; 

    if (CRYPT_BLOWFISH == 1 && !$this->portable_hashes) { 
     $random = $this->get_random_bytes(16); 
     $hash = 
      crypt($password, $this->gensalt_blowfish($random)); 
     if (strlen($hash) == 60) 
      return $hash; 
    } 

    if (CRYPT_EXT_DES == 1 && !$this->portable_hashes) { 
     if (strlen($random) < 3) 
      $random = $this->get_random_bytes(3); 
     $hash = 
      crypt($password, $this->gensalt_extended($random)); 
     if (strlen($hash) == 20) 
      return $hash; 
    } 

    if (strlen($random) < 6) 
     $random = $this->get_random_bytes(6); 
    $hash = 
     $this->crypt_private($password, 
     $this->gensalt_private($random)); 
    if (strlen($hash) == 34) 
     return $hash; 

    # Returning '*' on error is safe here, but would _not_ be safe 
    # in a crypt(3)-like function used _both_ for generating new 
    # hashes and for validating passwords against existing hashes. 
    return '*'; 
} 

function CheckPassword($password, $stored_hash) 
{ 
    $hash = $this->crypt_private($password, $stored_hash); 
    if ($hash[0] == '*') 
     $hash = crypt($password, $stored_hash); 

    return $hash == $stored_hash; 
} 

}

>

+0

là đệ có thể đọc được kiểm tra nó bằng cách ** is_readable ('FILE_PATH') ** thể có vấn đề xin phép .. :) –

+0

Cảm ơn bạn đã nhập vào của bạn @Praveen Kumar. Tôi đã kiểm tra sự cho phép, nó có vẻ ổn. Tệp có thể đọc và ghi được. – mayleficent

+0

lỗi: Không thể tải tệp được yêu cầu: helpers/phpass_helper.php.check tên tệp phpass_helper.php không phải là Phpass_helper.php. Chuyển hướng direcory của bạn không được phép thay đổi quyền cho 777 và nó sẽ hoạt động. Chúng tôi làm tương tự cho laravel trong ubuntu. Vấn đề này xuất hiện khi bạn chuyển từ cửa sổ sang Linux. bạn có thể sử dụng sudo để thay đổi quyền truy cập thư mục. – Bugfixer

Trả lời

3

Như bạn có thể nhìn thấy trong CodeIgniter Documents:

Không giống như hầu hết các hệ thống khác trong CodeIgniter, Helpers không viết bằng một định dạng Object Oriented . Chúng đơn giản, chức năng thủ tục. Mỗi chức năng trợ giúp thực hiện một tác vụ cụ thể, không phụ thuộc vào các chức năng khác.

Để tải một helper, tên của các tập tin có được như "phpass_helper.php" và bên trong bộ điều khiển, bạn nạp theo cách này

$this->load->helper('phpass_helper'); 

Nhưng trong trường hợp của bạn với lớp học "PasswordHash", tôi khuyên bạn nên chuyển đổi nó thành Thư viện, điều này phù hợp hơn với ứng dụng của bạn và cách áp dụng đúng cách.

Creating libraries in Codeigniter

+0

cảm ơn bạn đã trả lời, nó giúp tôi giải quyết vấn đề. Sau khi tôi chuyển đổi tập tin của tôi vào một thư viện và thay đổi tên lớp từ PasswordHash thành Phpass, nó hoạt động. một lần nữa cảm ơn bạn và cảm ơn tất cả mọi người đã giúp đỡ, tôi thực sự đánh giá cao nó. – mayleficent

Các vấn đề liên quan