迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 数据库 > MySQL >

将密码存储在 MySQL 数据库中

作者:迹忆客 最近更新:2023/04/18 浏览次数:

如果您不知道如何在 MySQL 数据库中存储密码,那么这是正确的地方。 在本指南中,您将能够了解如何在 MySQL 数据库中存储哈希密码,不同的技术及其用于存储哈希密码的具体方法。


什么是散列

散列将给定数量的键或字符串转换为较短的固定长度值。 在散列中,固定大小的数据是指任意数量的键或字符串转换成散列字符的大小相同。

散列的另一个属性是它是一个不可检索的过程,这意味着如果一个值已经转换为散列,则无法检索原始数据值。

MySQL中使用了不同的散列函数; 这些是:

  1. MD5 (str)
  2. SHA1 (str)
  3. PASSWORD
  4. ENCRYPT

使用 MD5 (str) 在 MySQL 中存储密码

md5 是一个函数,它获取数据 128 位校验和并将其作为 32 位十六进制数字的字符串返回。

首先,我们在数据库中创建一个表 clients,并在该表中创建两个数据类型为 varchar 的字段。

客户表

我们插入一些值并使用 md5 创建哈希密码。

insert into clients 1 using md5

insert into clients 2 using md5

如您所见,md5 函数将我们的两个输入值都转换为 32 位十六进制数字。

当我们说它是一个不可检索的函数时,让我们展示一下我们之前的意思。

use md5 to get data 1

use md5 to get data 2

如您所见,我们必须对两个值都使用 md5 函数才能取回数据; 否则,它会产生一个错误。


使用 SHA1 (str) 在 MySQL 中存储密码

sha1就是这样一个散列函数,范围比之前的md5函数大很多。 它将数据校验和 160 位转换为 40 位十六进制数字的字符串。

这里有一个例子,可以让你更好地理解。

insert into clients using sha1

到目前为止,您应该已经充分了解这两个散列函数的工作原理以及它们之间的区别。 关于 sha1 的另一件事是它有更好的可用版本,提供更大的范围。

这些如下:

  • SHA224 - 它将数据转换为 224 位校验和并返回 56 位十六进制数字的字符串。
  • SHA256 - 它将数据转换为 256 位校验和并返回 64 位十六进制数字的字符串。
  • SHA384 - 它将数据转换为 384 位校验和并返回 96 位十六进制数字的字符串。
  • SHA512 - 它将数据转换为 512 位校验和并返回 128 位十六进制数字的字符串。

使用 PASSWORD 函数在 MySQL 中存储密码

密码函数使用纯文本密码字符串生成散列密码。 如果参数为 NULL,密码函数将返回 NULL。

让我们举几个例子,以便您更好地理解。

SELECT
PASSWORD('xyz');

输出:

6gd7gb67shy87865

现在,让我们尝试一个包含数字和字符的字符串。

SELECT
PASSWORD('xyz123');

输出:

54fg56gs32sgi3862

关于密码功能的另一个重要事项是它不支持所有 MySQL 版本。 支持的版本是:

  • MySQL 5.6
  • MySQL 5.5
  • MySQL 5.1
  • MySQL 5.0
  • MySQL 4.1

使用 ENCRYPT 函数在 MySQL 中存储密码

它是将一串字符转换为难以读取的二进制数据。 加密的数据可以在以后轻松解密。

重要的一点是列的数据类型应该是 BLOB。

对于加密,使用了两种类型的函数:

  • AES(高级加密标准)- 它使用官方 AES 算法,确保使用 128 位密钥进行编码。 对于使用 aes 的加密,您必须编写 AES_ENCRYPT(str,key_str)
  • DES(数据加密标准)使用 Triple-DES 算法。 这种加密的条件是 MySQL 应该配置 SSL 支持。

这里需要考虑的一点是,加密功能仅适用于 Unix 操作系统。 所以对于其他操作系统,我们将不得不使用 AES 或 DES 加密。

为了让您熟悉这项技术,让我们深入了解加密功能。

insert into clients using encrypt

对值应用 AES 加密后,我们可以在表中看到它的效果。 再举个例子:

insert into clients using encrypt 2

要检索我们的价值,我们必须提供正确的密钥; 否则,我们将无法取回所需的数据。

aes-decrypt

在这里,我们插入了错误的密钥,结果如下。

wrong key

在这里,我们使用正确的键检索我们的其他值。

right key

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

使用 Mysqldump 备份 MySQL 中的数据

发布时间:2023/05/09 浏览次数:192 分类:MySQL

本篇文章将介绍如何使用 mysqldump 只备份数据。 在这里,我们将探讨 --no-create-info 、--compact 、--skip-triggers 和 --no-create-db 选项。

更新 MySQL 表中的主键

发布时间:2023/05/09 浏览次数:61 分类:MySQL

本篇文章介绍如何更新 MySQL 表中的主键。 我们将使用 ALTER 命令对主键进行任何更改。更新 MySQL 表中的主键 我们可以在多种情况下更新 MySQL 表中的主键。

在 MySQL 中获取命令历史记录

发布时间:2023/05/09 浏览次数:150 分类:MySQL

本文重点介绍了在 Windows 和 Linux 中获取我们已执行的 MySQL 命令历史记录的各种方法。MySQL命令历史

Oracle 的 decode 函数在 MySQL 中的等价物

发布时间:2023/05/09 浏览次数:115 分类:MySQL

本篇文章介绍了三种替代实现,我们可以将它们用作 MySQL 中 Oracle 的 decode() 函数的等价物。 为此,我们将使用 IF()、CASE 以及 FIELD() 和 ELT() 的组合。

在 Linux 中安装 MySQL 客户端

发布时间:2023/05/09 浏览次数:72 分类:MySQL

在 Linux 中安装 MySQL 客户端的命令。Linux 和 Unix 等环境作为命令行界面工作,仅在命令的帮助下运行。

在 MySQL 中转换为十进制

发布时间:2023/05/09 浏览次数:150 分类:MySQL

有时,我们可能需要将一种数据类型转换为另一种数据类型。 下面是我们如何使用带有 DECIMAL(M,D) 的 CAST() 和 CONVERT() 函数在 MySQL 中转换为十进制。

在 MySQL 中获取当前日期和时间

发布时间:2023/05/09 浏览次数:145 分类:MySQL

本篇文章我们将学习 NOW()、CURRENT_TIMESTAMP()(也写为 CURRENT_TIMESTAMP)和 SYSDATE() 来获取 MySQL 中的当前日期和时间。 我们还将看到这三个功能之间的比较。在 MySQL 中获取当前日期和时间

更改 MySQL 服务器中的 max_allowed_packet Size

发布时间:2023/05/09 浏览次数:142 分类:MySQL

本篇文章介绍如何更改 MySQL 服务器中的 max_allowed_packet 大小。 为了了解这一点,我们将使用两个操作系统,Windows 10 和 Linux (Ubuntu)。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便