【问题标题】:PHP - Getting variable data from another functionPHP - 从另一个函数获取变量数据
【发布时间】:2018-06-30 06:24:47
【问题描述】:

我正在尝试使用 AES-256 加密密码,因为我在数据库中有密钥和方法。我的问题是我使用 mysqli 并且效果很好,但现在我正在使用 PDO else mysqli 并创建函数。

没有加密功能,这些功能也能正常工作。这就是我的代码。

<?php 

class DWLib {

public function Register($u_name, $u_email, $u_pass) {
        try {
            $db = DB();
            $query = $db->prepare("INSERT INTO users(u_fname, u_lname, u_name, u_email, u_pass, u_rank) VALUES ('','',:username,:email,:password,'1')");
            $query->bindParam("username", $u_name, PDO::PARAM_STR);
            $query->bindParam("email", $u_email, PDO::PARAM_STR);

            global $password;

            $password = substr(hash('sha256', $password, true), 0, 32);

            global $method;

            $iv = chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0);

            $encrypted = base64_encode(openssl_encrypt($u_pass, $method, $password, OPENSSL_RAW_DATA, $iv));

            $query->bindParam("password", $encrypted, PDO::PARAM_STR);
            $query->execute();
            return $db->lastInsertId();
        } catch (PDOException $e) {
            exit($e->getMessage());
        }
    }

  public function Encryption($password, $method) 
    {
        try {
            $db = DB();
            $query = $db->prepare("SELECT * FROM encryption");
            $query->execute();
            if ($query->rowCount() > 0) {
                while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
                    $password = $row["password"];
                    $method = $row["method"];
                }
            } else {
                return false;
            }
        } catch (PDOException $e) {
            exit($e->getMessage());
        }
    }
}

?>

我尝试使用return,但一直不起作用...

【问题讨论】:

  • 你为什么不用password_hash() / password_verify()
  • 因为 SHA 不是加密,它是一种单向哈希函数。 AES (Advanced_Encryption_Standard) 是一种对称加密标准。

标签: php mysql encryption pdo


【解决方案1】:

如果你想更新$password$method

您必须通过引用 &amp; 传递它们:

public function Encryption(&$password, &$method) {

编辑

如果你必须从函数中传递变量,你必须使用属性。添加 private $password;private $method; 并将它们与 $this-&gt;password$this-&gt;method 一起使用:

class DWLib {
    private $password;
    private $method; 

    public function function_1() {
       // ...
          $this->password = "something";
          $this->method = "something else";
       // ...
    }

    public function function_2() {
       // ...
          var_dump($this->password) ;
          var_dump($this->method) ; 
       // ...
    }

 }

【讨论】:

  • 我正在尝试从表中获取数据(密码和方法)并在其他函数中使用该数据来加密密码。
  • 保持,不从其他函数获取数据。我需要从函数 public function function_1() { // ... $this->password = $row["password"]; 中获取数据$this->method = $row["method"]; // ... } 到具有 $password = substr(hash('sha256', $this->password, true), 0, 32); 的函数应该是这样吧?:$password = substr(hash('sha256', var_dump($this->password), true), 0, 32);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-18
  • 1970-01-01
相关资源
最近更新 更多