MySQL 加密函数对Web敏感数据的保护

以下的文章主要介绍的是利用MySQL 加密函数对Web网站的某些敏感数据进行保护的实际操作步骤,如果你现在正在使用的是MySQL(和PHP搭配之最佳组合)的Web实际应用程序,那么它把密码或者其他敏感信息保存在应用程序里的机会就很大。

保护这些数据免受黑客或者窥探者的获取是一个令人关注的重要问题,因为您既不能让未经授权的人员使用或者破坏应用程序,同时还要保证您的竞争优势。

幸运的是,MySQL(和PHP搭配之最佳组合)带有很多设计用来提供这种类型安全的MySQL加密函数。本文概述了其中的一些函数,并说明了如何使用它们,以及它们能够提供的不同级别的安全。

双向加密

就让我们从最简单的加密开始:双向加密。在这里,一段数据通过一个密钥被加密,只能够由知道这个密钥的人来解密。MySQL(和PHP搭配之最佳组合)有两个函数来支持这种类型的加密,分别叫做ENCODE()和DECODE()。下面是一个简单的实例:

 

  1. MySQL(和PHP搭配之最佳组合)> INSERT INTO users (username, password) VALUES ('joe', ENCODE('guessme', 'abracadabra'));  
  2. Query OK, 1 row affected (0.14 sec) 

其中,Joe的密码是guessme,它通过密钥abracadabra被加密。要注意的是,加密完的结果是一个二进制字符串,如下所示:

 

  1. MySQL(和PHP搭配之最佳组合)> SELECT * FROM users WHERE username='joe';  
  2. +----------+----------+  
  3. | username | password |  
  4. +----------+----------+  
  5. | joe | ¡?i??!? |  
  6. +----------+----------+  
  7. 1 row in set (0.02 sec) 

abracadabra这个密钥对于恢复到原始的字符串至关重要。这个密钥必须被传递给DECODE()MySQL加密函数,以获得原始的、未加密的密码。下面就是它的使用方法:

 

  1. MySQL(和PHP搭配之最佳组合)> SELECT DECODE(password, 'abracadabra') FROM users WHERE username='joe';  
  2. +---------------------------------+  
  3. | DECODE(password, 'abracadabra') |  
  4. +---------------------------------+  
  5. | guessme |  
  6. +---------------------------------+  
  7. 1 row in set (0.00 sec) 

应该很容易就看到它在Web应用程序里是如何运行的——在验证用户登录的时候,DECODE()会用网站专用的密钥解开保存在数据库里的密码,并和用户输入的内容进行对比。假设您把PHP用作自己的脚本语言,那么可以像下面这样进行查询:

  1. $query = "SELECT COUNT(*) FROM users WHERE username='$inputUser' AND DECODE(password, 'abracadabra') = '$inputPass'";?> 

提示:虽然ENCODE()和DECODE()这两个函数能够满足大多数的要求,但是有的时候您希望使用强度更高的加密手段。在这种情况下,您可以使用AES_ENCRYPT()和AES_DECRYPT()函数,它们的工作方式是相同的,但是加密强度更高。

单向加密

单向加密与双向加密不同,一旦数据被加密就没有办法颠倒这一过程。因此密码的验证包括对用户输入内容的重新加密,并将它与保存的密文进行比对,看是否匹配。一种简单的单向加密方式是MD5校验码。MySQL(和PHP搭配之最佳组合)的MD5()函数会为您的数据创建一个“指纹”并将它保存起来,供验证测试使用。下面就是如何使用它的一个简单例子:

 

  1. MySQL(和PHP搭配之最佳组合)> INSERT INTO users (username, password) VALUES ('joe', MD5('guessme'));  
  2. Query OK, 1 row affected (0.00 sec)  
  3. MySQL(和PHP搭配之最佳组合)> SELECT * FROM users WHERE username='joe';  
  4. +----------+----------------------------------+  
  5. | username | password |  
  6. +----------+----------------------------------+  
  7. | joe | 81a58e89df1f34c5487568e17327a219 |  
  8. +----------+----------------------------------+  
  9. 1 row in set (0.02 sec) 

现在您可以测试用户输入的内容是否与已经保存的密码匹配,方法是取得用户输入密码的MD5校验码,并将它与已经保存的密码进行比对,就像下面这样:

 

  1. MySQL(和PHP搭配之最佳组合)> SELECT COUNT(*) FROM users WHERE username='joe' AND password=MD5('guessme');  
  2. +----------+  
  3. | COUNT(*) |  
  4. +----------+  
  5. |1 |  
  6. +----------+  
  7. 1 row in set (0.00 sec) 

或者,您考虑一下使用ENCRYPT()函数,它使用系统底层的crypt()系统调用来完成加密。这个MySQL加密函数有两个参数:一个是要被加密的字符串,另一个是双(或者多)字符的“salt”。它然后会用salt加密字符串;这个salt然后可以被用来再次加密用户输入的内容,并将它与先前加密的字符串进行比对。下面一个例子说明了如何使用它:

 

  1. MySQL(和PHP搭配之最佳组合)> INSERT INTO users (username, password) VALUES ('joe', ENCRYPT('guessme', 'ab'));  
  2. Query OK, 1 row affected (0.00 sec)  
  3. MySQL(和PHP搭配之最佳组合)> SELECT * FROM users WHERE username='joe';  
  4. +----------+---------------+  
  5. | username | password |  
  6. +----------+---------------+  
  7. | joe | ab/G8gtZdMwak |  
  8. +----------+---------------+  
  9. 1 row in set (0.00 sec) 

结果是

 

  1. MySQL(和PHP搭配之最佳组合)> SELECT COUNT(*) FROM users WHERE username='joe' AND password=ENCRYPT('guessme', 'ab');  
  2. +----------+  
  3. | COUNT(*) |  
  4. +----------+  
  5. |1 |  
  6. +----------+  
  7. 1 row in set (0.00 sec)  

 

提示:ENCRYPT()只能用在*NIX系统上,因为它需要用到底层的crypt()库。

幸运的是,上面的例子说明了能够如何利用MySQL(和PHP搭配之最佳组合)对您的数据进行单向和双向的加密,并告诉了您一些关于如何保护数据库和其他敏感数据库信息安全的理念。

【编辑推荐】

  1. MySQL索引被破坏所产生的问题解决
  2. 如何用MySQL搜索索引字段来提高搜索效率
  3. MySQL5字符集问题的解决方案
  4. MySQL启动方法与实际操作步骤
  5. 安装在MySQL4.1的453h出现问题的解决

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/277660.html<

(0)
管理的头像管理
上一篇2025-05-11 05:36
下一篇 2025-05-11 05:38

相关推荐

  • jsp空间购买和交换数据空间怎么买,有哪些注意事项?

    购买JSP空间时,是否考虑过数据交换空间的性能?简米科技(2003年始创,23年行业沉淀)与酷番云(工信部一类增值电信全牌照)这类持牌自营机房的服务商,能确保数据交换的高效稳定,是值得优先选择的合作伙伴,为什么JSP空间需要搭配独立的数据交换空间从JSP应用特性看数据交换需求JSP基于Java技术,常用于企业级……

    2026-08-11
    0
  • 建网站用香港空间效果怎么样,香港空间稳定吗?

    建网站用香港空间,对于创建网站资产来说,核心价值在于免备案和全球带宽优势,尤其适合外贸、跨境电商和需要快速启动的项目,但你必须权衡国内访问延迟,并选择有资质的服务商以保证资产安全,香港空间的核心优势与适用边界免备案:节省时间就是节省成本国内服务器需要备案,通常需要10到20天,香港空间无需备案,域名解析后即可上……

    2026-08-11
    0
  • Java连接云数据库的方法是什么,如何操作

    Java连接云数据库的核心在于通过JDBC驱动,结合云服务商提供的连接地址、端口、数据库名及认证信息,配置安全策略(如SSL、IP白名单),即可实现稳定高效的远程数据库访问,基础准备:JDBC驱动与依赖管理连接云数据库前,需要确保开发环境具备对应的JDBC驱动,以最常见的MySQL为例,你需要引入mysql-c……

    2026-08-11
    0
  • 建网站公安联网备案必须使用数据码吗,备案流程是什么

    网站备案包括ICP备案和公安联网备案,两者缺一不可,公安联网备案必须使用服务商提供的数据码,选择持有合法资质的服务商是顺利通过备案的前提,为什么网站必须进行公安联网备案根据公安部《计算机信息网络国际联网安全保护管理办法》,网站开通后30日内必须到公安机关办理备案手续,未完成公安备案的网站,面临责令整改、关闭网站……

    2026-08-10
    0
  • 建一个企业网站大概需要多少钱?,怎么收费?

    建网站要多少钱,没有一个固定的数字,几百到几万都可能,但真正的“创建网站资产”绝不仅仅是初次投入的成本,而是基于长期稳定、合规和安全的持续性投入,其中核心取决于你选择了什么样的“地基”来承载你的业务,建站预算的构成与行业基准当你开始规划一个网站,最先面对的就是预算问题,一个常见的误区是只关注网站“看起来”的建造……

    2026-08-10
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注