【问题标题】:How to store encrypted data in mySQL如何在 mySQL 中存储加密数据
【发布时间】:2015-02-22 04:27:24
【问题描述】:

我对 2 路加密感到不知所措。有很多信息,但我似乎找不到适合我需要的可靠信息。

我在 PHP 中有以下内容:

function encrypt( $key, $string ){
    $encrypted = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $string, MCRYPT_MODE_CBC, md5(md5($key))));
    return $encrypted;
}

function decrypt( $key, $encrypted ){
    $decrypted = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($encrypted), MCRYPT_MODE_CBC, md5(md5($key))), "\0");
    return $decrypted;
}
//Stripped out code for readability
$encryption_Key = 'password'; //such strong, many vulnerable
$name = encrypt($encryption_Key, $_POST['name']);
$stmt = $conn->prepare("UPDATE Customers SET 
                                    name = ? WHERE blah = ?");
$stmt->bind_param('si', $name, $blah);
$stmt->execute();
$stmt->close();

但是查看 mySQL,我得到的行话如下:

~/�Jꎈ*3��9k��Z�f������ï

当我像这样解密时出现不可读的字符:

$name = decrypt($encryption_Key, $name ); 

名称列的字段类型目前为:

varchar(200)

我已经看到了使用二进制或 blob 作为字段类型的示例,但我运气不佳。对正确方向的一些帮助将不胜感激。

【问题讨论】:

  • 您的代码对我来说运行良好。检查您的数据库和表的编码设置为。
  • 我确实解决了,不得不将排序规则更改为 utf8_general_ci。终于过了这个小关!

标签: php mysql authentication encryption


【解决方案1】:

只是一个建议。 您是否查看过数据库中名称字段的排序规则?确保它位于utf8_general_ci 之类的位置。然后确保在更新到数据库之前打印加密的$name 变量,以确保它包含正确的值。 希望这会有所帮助。

【讨论】:

  • 谢谢,我确实按照您的建议设置了排序规则,在我的代码中发现了另一个错误,现在它可以工作了!
猜你喜欢
  • 1970-01-01
  • 2016-02-15
  • 2021-04-10
  • 1970-01-01
  • 1970-01-01
  • 2019-03-17
  • 2016-12-25
相关资源
最近更新 更多