1

我的一个客户希望在数据库中对客户名称进行加密,不要问他们为什么只是打算这样做,所以我一直在尝试使用 PHP 进行 MySQL AES_Encrypt 和 AES_Decrypt,所以我真的很感激一些帮助......

加密代码

function addname ($name, $refid) {

    include("../config.php");

    // Open up a new MySQLi connection to the MySQL database
    mysql_connect($dbHost, $dbUsername, $dbPassword);
    mysql_select_db($dbTable);

    $code = substr($output, 0, 8);

    if (!isset($refid)) {
        $refid = "ERROR";
    }

    $query = "INSERT INTO `clients` (fname, code, refid, active) VALUES     (AES_ENCRYPT('$fname', UNHEX('F3229A0B371ED2D9441B830D21A390C3')), '$code', '$refid',   0)";

    $runQuery = mysql_query($query);

    if ($runQuery != true) {
        return mysql_error();
    } else {
        return $code;
    }
}

解密代码

function decryptname() {
        $input=947270;

        include("config.php");

        // Open up a new MySQLi connection to the MySQL database
        mysql_connect($dbHost, $dbUsername, $dbPassword);
        mysql_select_db($dbTable);


        // Build the query
        $sqlToRun = "SELECT * FROM `clients` WHERE code='$input' AND active=0";

        // Run it
        $check = mysql_query($sqlToRun);

        while($row = mysql_fetch_array($check)) {

        $encryptedname = $row['fname'];

        $decryptedname = mysql_query("AES_DECRYPT('$encryptedname', UNHEX('F3229A0B371ED2D9441B830D21A390C3'))");

        $check2 = $row['fname'];
          }

        mysql_close();


        if (!isset($check2)) {
            $check2 = "wow there is no check2";
        }


        exit($check2);

}

decryptname();

问题

MySQL 数据库显示以下值,看起来正常

e309367d1867c3273a8f8b298ed8beb3

基本上,当我不包含 $decryptedname 时,我会得到以下输出

ã6}gÃ':‹)ŽØ¾³

如果我确实包含它,我会得到一个空白屏幕并且没有 PHP 或 MySQL 错误?

更多信息

名称的数据库列结构是

varbinary(9999)

如果有人可以帮助我,我将不胜感激,如果您需要更多信息,请询问!

更新

我在 SQL 中运行了以下命令,它返回NULL

SELECT AES_DECRYPT('password', "UNHEX('F3229A0B371ED2D9441B830D21A390C3')") FROM passwords WHERE code=947270
4

2 回答 2

1

看看PHP AES encrypt/decrypt,应该对你有很大帮助。

不要使用 MySQL 加密,而是使用 PHP。您不希望查询花费的时间比他们目前在数据库上执行读取和写入的时间长。

于 2013-09-08T13:24:47.973 回答
0

我遇到了类似的问题。我的加密数据字段是一个 CHAR 字段。我在网上某处(https://dev.mysql.com/doc/refman/5.5/en/encryption-functions.html)读到 mysql 可能会从数据中裁剪尾随空白,并因此破坏它以进行解密。使用 BLOB 解决了我的问题。

于 2016-04-15T17:08:39.877 回答