若何操纵MySQL加密函数保护网站敏感数据[MySQL防范]
本文“若何操纵MySQL加密函数保护网站敏感数据[MySQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
假如您正在运行利用MySQL的Web利用程序,那么它把密码大概其他敏感信息保存在利用程序里的机会就很大.保护这些数据免受黑客大概窥测者的获得是一个令人关注的重要问题,因为您既不能让未经受权的人员利用大概破坏利用程序,同时还要保证您的竞争上风.幸运的是,MySQL带有很多计划用来供应这种范例安全的加密函数.本文概述了此中的一些函数,并阐明了若何利用它们,以及它们可以供应的差别级别的安全.
双向加密
就让我们从最简单的加密开始:双向加密.在这里,一段数据通过一个密钥被加密,只可以由知道这个密钥的人来解密.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用作自己的脚本语言,那么可以像下面这样举行查询:
<?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, password) VALUES ('joe', 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, password) VALUES ('joe', 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加密函数保护网站敏感数据[MySQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |