将二进制数据保存到MySQL-bin2hex与base64_encode

时间:2015-08-30 13:03:22

标签: php

我有一个加密类来加密用户的密码,最终结果是二进制字符串。

我想将此保存为MySQL作为用户的密码,但由于MySQL不能很好地处理二进制数据,我想将其转换为更加数据库友好的格式。

只要事先使用bin2hexbase64_encode以及hex2binbase64_decode,我似乎能够加密/解密从MySQL中保存和提取值。之后。

我的问题是,如果有任何理由我应该选择一个而不是另一个?是否比另一个更可靠?是否比另一个更快?

谢谢。

2 个答案:

答案 0 :(得分:2)

您应该在数据库中使用BINARYVARBINARY类型以及要插入的预准备语句。然后你根本不需要做任何转换。据我所知,它是所有世界中最好的。线路上的数据大小将是紧凑的,并且在存储或php脚本中不会使用额外的内存。

答案 1 :(得分:1)

存储用户密码是bad的想法。 最好是散列用户密码并存储散列。

password_hash($password, PASSWORD_DEFAULT)

该函数返回一个可以简单存储在数据库中的字符串。

验证它:

if (password_verify($userPassword, $hash)) {
    // Login successful.
}

另请参阅this paragon网站,了解使用libsodium(present in php 7.2+)的更安全的密码哈希方法:

// Password hashing:
$hash_str = \Sodium\crypto_pwhash_str(
    $password,
    \Sodium\CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE,
    \Sodium\CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE
);
// Password verification:
if (\Sodium\crypto_pwhash_str_verify($hash_str, $password)) {
    // recommended: wipe the plaintext password from memory
    \Sodium\memzero($password);

    // Password was valid.
} else {
    // recommended: wipe the plaintext password from memory
    \Sodium\memzero($password);

    // Password was invalid.
}