以下的文章主要介绍的是利用MySQL 加密函数对Web网站的某些敏感数据进行保护的实际操作步骤,如果你现在正在使用的是MySQL(和PHP搭配之更佳组合)的Web实际应用程序,那么它把密码或者其他敏感信息保存在应用程序里的机会就很大。
保护这些数据免受黑客或者窥探者的获取是一个令人关注的重要问题,因为您既不能让未经授权的人员使用或者破坏应用程序,同时还要保证您的竞争优势。
幸运的是,MySQL(和PHP搭配之更佳组合)带有很多设计用来提供这种类型安全的MySQL加密函数。该篇文章概述了其中的一些函数,并说明了如何使用它们,以及它们能够提供的不同级别的安全。
双向加密
就让我们从最简单的加密开始:双向加密。在这里,一段数据通过一个密钥被加密,只能够由知道这个密钥的人来解密。MySQL(和PHP搭配之更佳组合)有两个函数来支持这种类型的加密,分别叫做ENCODE()和DECODE()。下面是一个简单的实例:
MySQL(和PHP搭配之更佳组合)> INSERT INTO users (username, password) VALUES ('joe', ENCODE('gues *** e', 'abracadabra')); Query OK, 1 row affected (0.14 sec)
其中,Joe的密码是gues *** e,它通过密钥abracadabra被加密。要注意的是,加密完的结果是一个二进制字符串,如下所示:
MySQL(和PHP搭配之更佳组合)> SELECT * FROM users WHERE username='joe'; +----------+----------+ | username | password | +----------+----------+ | joe | ¡ i ! | +----------+----------+ 1 row in set (0.02 sec)
abracadabra这个密钥对于恢复到原始的字符串至关重要。这个密钥必须被传递给DECODE()MySQL加密函数,以获得原始的、未加密的密码。下面就是它的使用 *** :
MySQL(和PHP搭配之更佳组合)> SELECT DECODE(password, 'abracadabra') FROM users WHERE username='joe'; +---------------------------------+ | DECODE(password, 'abracadabra') | +---------------------------------+ | gues *** e | +---------------------------------+ 1 row in set (0.00 sec)
应该很容易就看到它在Web应用程序里是如何运行的——在验证用户登录的时候,DECODE()会用网站专用的密钥解开保存在数据库里的密码,并和用户输入的内容进行对比。假设您把PHP用作自己的脚本语言,那么可以像下面这样进行查询:
$query = "SELECT COUNT(*) FROM users WHERE username='$inputUser' AND DECODE(password, 'abracadabra') = '$inputPass'"; >
提示:虽然ENCODE()和DECODE()这两个函数能够满足大多数的要求,但是有的时候您希望使用强度更高的加密手段。在这种情况下,您可以使用AES_ENCRYPT()和AES_DECRYPT()函数,它们的工作方式是相同的,但是加密强度更高。
单向加密
单向加密与双向加密不同,一旦数据被加密就没有办法颠倒这一过程。因此密码的验证包括对用户输入内容的重新加密,并将它与保存的密文进行比对,看是否匹配。一种简单的单向加密方式是MD5校验码。MySQL(和PHP搭配之更佳组合)的MD5()函数会为您的数据创建一个“指纹”并将它保存起来,供验证测试使用。下面就是如何使用它的一个简单例子:
MySQL(和PHP搭配之更佳组合)> INSERT INTO users (username, password) VALUES ('joe', MD5('gues *** e')); Query OK, 1 row affected (0.00 sec) MySQL(和PHP搭配之更佳组合)> SELECT * FROM users WHERE username='joe'; +----------+----------------------------------+ | username | password | +----------+----------------------------------+ | joe | 81a58e89df1f34c5487568e17327a219 | +----------+----------------------------------+ 1 row in set (0.02 sec)
现在您可以测试用户输入的内容是否与已经保存的密码匹配, *** 是取得用户输入密码的MD5校验码,并将它与已经保存的密码进行比对,就像下面这样:
MySQL(和PHP搭配之更佳组合)> SELECT COUNT(*) FROM users WHERE username='joe' AND password=MD5('gues *** e'); +----------+ | COUNT(*) | +----------+ |1 | +----------+ 1 row in set (0.00 sec)
或者,您考虑一下使用ENCRYPT()函数,它使用系统底层的crypt()系统调用来完成加密。这个MySQL加密函数有两个参数:一个是要被加密的字符串,另一个是双(或者多)字符的“salt”。它然后会用salt加密字符串;这个salt然后可以被用来再次加密用户输入的内容,并将它与先前加密的字符串进行比对。下面一个例子说明了如何使用它:
MySQL(和PHP搭配之更佳组合)> INSERT INTO users (username, password) VALUES ('joe', ENCRYPT('gues *** e', 'ab')); Query OK, 1 row affected (0.00 sec) MySQL(和PHP搭配之更佳组合)> SELECT * FROM users WHERE username='joe'; +----------+---------------+ | username | password | +----------+---------------+ | joe | ab/G8gtZdMwak | +----------+---------------+ 1 row in set (0.00 sec)
结果是
MySQL(和PHP搭配之更佳组合)> SELECT COUNT(*) FROM users WHERE username='joe' AND password=ENCRYPT('gues *** e', 'ab'); +----------+ | COUNT(*) | +----------+ |1 | +----------+ 1 row in set (0.00 sec)
提示:ENCRYPT()只能用在*NIX系统上,因为它需要用到底层的crypt()库。
幸运的是,上面的例子说明了能够如何利用MySQL(和PHP搭配之更佳组合)对您的数据进行单向和双向的加密,并告诉了您一些关于如何保护数据库和其他敏感数据库信息安全的理念。
正在启动windows时间长怎么办 小编带来了Windows 7/8.1正在启动windows时间长解决方法,假如有朋友在安装完Windows系统之后一直停留在“正在启动windows”的话,不妨试一试下文的方法哦~ 原因:Windows 7/8.1不完全支持UEFI,需要CSM(Comp...
重装系统是我们面对许多电脑问题时的终极方法,不过重装系统也不意味着就能将全部的问题都修复。一些用户在重装系统后开机时,电脑卡在“正在启动Windows”开机界面上了,这要怎么解决呢? Windows 7系统重装后卡在开机界面的解决方法: 一、首先可以看看该故障出现的原因是否是因为启动了acp...
用Windows 7久了,C盘越来越大,原来50G的空间基本用完了,又不想重装系统,就想着能不能直接扩容。 在网上搜了半天,看了无数教程,都写得不明不白的,结合了几篇教程才终于搞明白。 重新总结一下,方便有需要的人。 所用软件: http://www.jb51.net/softs/57895...
解决方法: 其实处理这些使用流氓软件,需要将相关的.exe文件删除,使它不能再运行,或者直接清除这个服务本身,使计算机重启的时候,它不会再启动。比如Hijackthis扫描,在扫描日志中,一般会把非Windows系统的服务以023的方式列出来,如下面这段: O23 - ...
故障分析: 主要原因应该是不存在软盘驱动器或驱动器未安装,找到故障原因后,Windows 7 32位系统只要将软盘驱动器禁用就可以了。 解决措施: 1、右键点击计算机,选择管理,打开计算机管理窗口; 2、在计算机管理中,找到设备管理器,在右边的软盘控制器中右击,选择卸载即可。 以...
1月13日消息,微软今天为Windows 7(SP1)用户重新推送了编号为KB2952664的更新补丁,该更新在官方KB知识库中的描述为“Windows 7系统升级兼容性更新”,用于帮助微软改进当前版本系统,提升升级到最新版Win10系统的体验。 这项更新还用于在系统中显示Windows10更新提...