若是你使用的正是mysql数据库,那么你把密码或者其余敏感重要信息保存在应用程序里的机会就很大。保护这些数据免受黑客或者窥探者的获取是一个使人关注的重要问题,由于你既不能让未经受权的人员使用或者破坏应用程序,同时还要保证您的竞争优点。幸运的是,MySQL带有不少设计用来提供这种类型安全的加密函数。本文概述了其中的一些函数,并说明了如何使用它们,以及它们可以提供的不一样级别的安全。mysql
就让咱们从最简单的加密开始:双向加密。sql
在这里,一段数据经过一个密钥被加密,只可以由知道这个密钥的人来解密。MySQL有两个函数来支持这种类型的加密,分别叫作ENCODE()和DECODE()。数据库
下面是一个简单的实例: 安全
mysql> INSERT INTO users (username, password) VALUES ('fantasy', ENCODE('123456', 'abcd'));
Query OK, 1 row affected (0.14 sec)
其中,fantasy的密码是123456,它经过密钥abcd被加密(这里能够自定义密匙)。要注意的是,加密完的结果是一个二进制字符串,以下所示: 函数
mysql> SELECT * FROM users WHERE username='fantasy'; +----------+----------+ | username | password | +----------+----------+ | fantasy | æÍ¹ | +----------+----------+ 1 row in set (0.02 sec) abcd这个密钥对于恢复到原始的字符串相当重要。这个密钥必须被传递给DECODE()函数,以得到原始的、未加密的密码。下面就是它的使用方法: mysql> SELECT DECODE(password, 'abcd') FROM users WHERE username='fantasy'; +---------------------------------+ | DECODE(password, 'abcd') | +---------------------------------+ | 123456 | +---------------------------------+ 1 row in set (0.00 sec)
应该很容易就看到它在Web应用程序里是如何运行的——在验证用户登陆的时候,DECODE()会用网站专用的密钥解开保存在数据库里的密码,并和用户输入的内容进行对比。假设您把PHP用做本身的脚本语言,那么能够像下面这样进行查询:post
$query = "SELECT COUNT(*) FROM users WHERE username='$username' AND DECODE(password, 'abcd') = '$password'";
注意:虽然ENCODE()和DECODE()这两个函数可以知足大多数的要求,可是有的时候您但愿使用强度更高的加密手段。在这种状况下,您可使用AES_ENCRYPT()和AES_DECRYPT()函数,它们的工做方式是相同的,可是加密强度更高点。网站