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

6 浏览
0 Comments

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

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

我想将其保存到MySQL作为用户的密码,但是因为MySQL对二进制数据不太友好,所以我想将其转换为更适合数据库的格式。

我似乎可以通过在先使用bin2hexbase64_encode,后使用hex2binbase64_decode的方式,成功地保存和提取MySQL中的值。

我的问题是,我应该选择其中一个吗?有没有任何原因我应该选择其中一个?有没有哪个更可靠?有没有哪个更快?

谢谢。

0
0 Comments

在存储用户密码时,直接将密码存储在数据库中是一个不好的做法。更好的方式是对用户密码进行哈希处理后再存储哈希值。

使用password_hash($password, PASSWORD_DEFAULT)函数对密码进行哈希处理,该函数会返回一个字符串,可以直接存储在数据库中。验证密码时使用password_verify($userPassword, $hash)函数来进行验证,如果验证成功,则登录成功。

为了提高密码的安全性,可以使用libsodium库(在php 7.2+中可用)来实现更安全的密码哈希方法。下面是一个使用libsodium库的示例:

// 密码哈希处理:
$hash_str = \Sodium\crypto_pwhash_str(
    $password,
    \Sodium\CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE,
    \Sodium\CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE
);
// 密码验证:
if (\Sodium\crypto_pwhash_str_verify($hash_str, $password)) {
    // 建议:从内存中删除明文密码
    \Sodium\memzero($password);
    // 密码有效。
} else {
    // 建议:从内存中删除明文密码
    \Sodium\memzero($password);
    // 密码无效。
}

以上是解决存储用户密码安全性问题的方法。通过对密码进行哈希处理,可以大大提高密码的安全性,避免直接将密码存储在数据库中。同时,使用libsodium库可以实现更高级的密码哈希方法,进一步增强密码的安全性。

0
0 Comments

使用BINARYVARBINARY类型的数据库和准备好的语句来进行插入。这样你就不需要进行任何转换了。据我所知,这是最好的选择。数据在传输过程中的大小将会很小,存储或者在php脚本中也不会使用额外的内存。

那么VARBINARY的最大长度和MEDIUMTEXT的最大长度有什么区别呢?

0