MYSQL教程利用MySQL加密函数保护Web网站敏感数据的方法分享
发布时间:2020-12-12 02:29:17 所属栏目:MySql教程 来源:网络整理
导读:《MYSQL教程利用MySQL加密函数保护Web网站敏感数据的方法分享》要点: 本文介绍了MYSQL教程利用MySQL加密函数保护Web网站敏感数据的方法分享,希望对您有用。如果有疑问,可以联系我们。 如果您正在运行使用MySQL的Web应用程序,那么它把密码或者其他敏感信息
《MYSQL教程利用MySQL加密函数保护Web网站敏感数据的方法分享》要点: 双向加密 就让我们从最简单的加密开始:双向加密.在这里,一段数据通过一个密钥被加密,只能够由知道这个密钥的人来解密.MySQL有两个函数来支持这种类型的加密,分别叫做ENCODE()和DECODE().下面是一个简单的实例: mysql> INSERT INTO users (username,password) VALUES ('joe',ENCODE('guessme','abracadabra')); Query OK,1 row affected (0.14 sec) 其中,Joe的密码是guessme,它通过密钥abracadabra被加密.要注意的是,加密完的结果是一个二进制字符串,如下所示: mysql> SELECT * FROM users WHERE username='joe'; +----------+----------+ | username | password | +----------+----------+ | joe | ?i??!? | +----------+----------+ 1 row in set (0.02 sec) abracadabra这个密钥对于恢复到原始的字符串至关重要.这个密钥必须被传递给DECODE()函数,以获得原始的、未加密的密码.下面就是它的使用方法: mysql> SELECT DECODE(password,'abracadabra') FROM users WHERE username='joe'; +---------------------------------+ | DECODE(password,'abracadabra') | +---------------------------------+ | guessme | +---------------------------------+ 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的MD5()函数会为您的数据创建一个“指纹”并将它保存起来,供验证测试使用.下面就是如何使用它的一个简单例子: mysql> INSERT INTO users (username,MD5('guessme')); Query OK,1 row affected (0.00 sec) mysql> SELECT * FROM users WHERE username='joe'; +----------+----------------------------------+ | username | password | +----------+----------------------------------+ | joe | 81a58e89df1f34c5487568e17327a219 | +----------+----------------------------------+ 1 row in set (0.02 sec) 现在您可以测试用户输入的内容是否与已经保存的密码匹配,方法是取得用户输入密码的MD5校验码,并将它与已经保存的密码进行比对,就像下面这样: mysql> SELECT COUNT(*) FROM users WHERE username='joe' AND password=MD5('guessme'); +----------+ | COUNT(*) | +----------+ | 1 | +----------+ 1 row in set (0.00 sec) 或者,您考虑一下使用ENCRYPT()函数,它使用系统底层的crypt()系统调用来完成加密.这个函数有两个参数:一个是要被加密的字符串,另一个是双(或者多)字符的“salt”.它然后会用salt加密字符串;这个salt然后可以被用来再次加密用户输入的内容,并将它与先前加密的字符串进行比对.下面一个例子说明了如何使用它: mysql> INSERT INTO users (username,ENCRYPT('guessme','ab')); Query OK,1 row affected (0.00 sec) mysql> SELECT * FROM users WHERE username='joe'; +----------+---------------+ | username | password | +----------+---------------+ | joe | ab/G8gtZdMwak | +----------+---------------+ 1 row in set (0.00 sec) 结果是 mysql> SELECT COUNT(*) FROM users WHERE username='joe' AND password=ENCRYPT('guessme','ab'); +----------+ | COUNT(*) | +----------+ | 1 | +----------+ 1 row in set (0.00 sec) 提示:ENCRYPT()只能用在*NIX系统上,因为它需要用到底层的crypt()库. 编程之家培训学院每天发布《MYSQL教程利用MySQL加密函数保护Web网站敏感数据的方法分享》等实战技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培养人才。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |