如何在 MySQL (PhpMyAdmin) 的用户表中“散列”我的密码?

Posted

技术标签:

【中文标题】如何在 MySQL (PhpMyAdmin) 的用户表中“散列”我的密码?【英文标题】:How do I 'hash' my passwords in a user table in MySQL (PhpMyAdmin)? 【发布时间】:2021-07-26 20:26:17 【问题描述】:

我是这一切的初学者,我目前正在将其作为我大学作业的一个模块进行,目前不在大学,因此我无法在那里获得帮助。

我正在尝试加密存储在用户表中的密码,我不知道该怎么做,我知道其中很多都可以解密,这不是我想要的。照片是我当前的用户表,密码是随机生成的 - 未加密。任何人都可以帮我解决如何对我的密码进行哈希处理并仍然可以正确登录,我是这一切的初学者,只需要一些指导来解决这个问题,

谢谢。

CREATE TABLE databaseusers ( 
    databaseruser_id int(5) NOT NULL, 
    database_user varchar(25) NOT NULL, 
    database_password varchar(40) NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

用户表

【问题讨论】:

这在问题中比在评论中更具可读性。它也是人们希望看到所有相关信息以帮助解释您的问题的地方 您使用哪种编程语言来填充表格数据?答案会因编程语言而异。 您不想散列密码而不是加密吗?存储用户密码时可以使用内置的PASSWORD函数开始 @gusto2 - 函数Password() 从未打算与用户密码一起使用,它不安全且已弃用。 @Ghost,恐怕你得花大力气自己研究一下。 StachOverflow 适合在您完成一些研究后询问错误 【参考方案1】:

您不能仅使用 SQL 安全地存储用户密码,您需要编程环境的专用密码哈希函数。应该使用散列而不是加密,然后密码以不可检索的形式存储,但这足以验证登录。

如果你的语言是 php,你可以用 password_hash() 函数来解决,密码哈希的字段应该是varchar(255):

// Hash a new password for storing in the database.
// The function automatically generates a cryptographically safe salt.
$hashToStoreInDb = password_hash($_POST['password'], PASSWORD_DEFAULT);

// Check if the hash of the entered login password, matches the stored hash.
// The salt and the cost factor will be extracted from $existingHashFromDb.
$isPasswordCorrect = password_verify($_POST['password'], $existingHashFromDb);

您可以在answer 中找到 PHP 的示例代码,如果您对有关安全存储密码的更多信息感兴趣,可以查看我的tutorial。

【讨论】:

以上是关于如何在 MySQL (PhpMyAdmin) 的用户表中“散列”我的密码?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 phpMyAdmin 中将 MySQL 版本升级到最新版本?

如何在phpmyadmin中将分隔数据导入mysql

如何在phpmyadmin中将分隔数据导入mysql

如何查看用于在 phpMyAdmin 或其他程序中创建视图的原始 MySQL?

如何在mysql或phpmyadmin中将列的值增加1?

如何在 MySQL/phpMyAdmin 中恢复数据库?