如何在mySQL中存储加密数据

时间:2014-12-24 01:34:51

标签: php mysql authentication encryption

我在双向加密方面变得不堪重负。有很多信息,但我似乎无法找到适合我需求的坚实信息。

我在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作为字段类型的示例,但我没有太多运气。非常感谢一些正确方向的帮助。

1 个答案:

答案 0 :(得分:2)

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