利用mysql加密功能共享网站敏感数据
双向加密
让我们用最简单的加密开始:双向加密。在这里,一块数据与一个密钥进行加密,并只能由人谁知道key.mysql有两个功能来支持这种类型的加密解密,称为编码和解码()()。以下是一个简单的例子:
MySQL >插入用户(用户名、密码)值(乔,编码('guessme、嘛呢叭咪));
查询OK,1行受影响(0.14秒)
在这,乔密码是guessme,这是经过加密的关键咒语。需要注意的是,加密的结果是一个二进制字符串,如下所示:
MySQL >从users用户名= '乔';
---------- ---------- + + +
| | |用户名密码
---------- ---------- + + +
|乔|我|!
---------- ---------- + + +
1行集(0.02秒)
咒语的关键是恢复到原始字符串的关键。这个密钥必须通过解码()函数来得到原始的、未加密的密码。下面是它的使用方式:
MySQL >选择解码(密码,嘛呢叭咪)从用户的用户名= '乔';
--------------------------------- + +
|解码(密码,嘛呢叭咪)|
--------------------------------- + +
| guessme |
--------------------------------- + +
1行集(0秒)
应该很容易看出它是如何在Web应用程序中运行的。当验证用户登录时,解码()将打开网站专用密钥保存在数据库中的密码,并将其与用户输入的内容进行比较。如果您使用PHP作为自己的脚本语言,则可以查询如下:
美元=选择查询计数(*)从用户,用户名为$ inputuser'and解码(密码,嘛呢叭咪)=inputpass美元;>
提示:虽然两功能的编码和解码()()可以满足大部分的要求,有时你想使用强加密。在这种情况下,你可以使用aes_encrypt()和()函数,这aes_decrypt工作方式相同,但加密高。
单向加密
单向加密不同于双向加密,一旦数据被加密,无法逆转这一过程。因此,密码的认证包括重新对用户输入的内容加密,并保存的密文进行比较,看是否匹配。一个简单的单向加密方法是MD5校验码,MD5()函数创建一个你的MySQL数据指纹并保存测试使用。下面是一个简单的例子,如何使用它:
MySQL >插入用户(用户名、密码)值(乔,MD5('guessme '));
查询OK,1行受影响(0秒)
MySQL >从users用户名= '乔';
---------- ---------------------------------- + + +
| | |用户名密码
---------- ---------------------------------- + + +
|乔| 81a58e89df1f34c5487568e17327a219 |
---------- ---------------------------------- + + +
1行集(0.02秒)
现在您可以测试用户输入的内容是否与保存的密码相匹配。方法是获取用户输入密码的MD5校验码,并将其与保存的密码进行比较。
MySQL > select count(*)从用户的用户名密码= = 'joe'and MD5('guessme);
---------- + +
|计数(*)|
+----------+
1 | |
---------- + +
1行集(0秒)
或者,你想使用加密()函数,它使用的加密系统调用()系统底层系统完成加密。这个函数有两个参数:一个字符串进行加密,而另一个是双(或多个)字符盐。然后用盐对字符串进行加密;然后盐可用于加密用户输入的内容,并与先前加密的字符串比较。下面的示例演示如何使用它:
MySQL >插入用户(用户名、密码)值('乔',加密('guessme ','ab '));
查询OK,1行受影响(0秒)
MySQL >从users用户名= '乔';
---------- --------------- + + +
| | |用户名密码
---------- --------------- + + +
|乔| AB / g8gtzdmwak |
---------- --------------- + + +
1行集(0秒)
其结果是
MySQL > select count(*)从用户的用户名密码= = 'joe'and加密('guessme ','ab);
---------- + +
|计数(*)|
---------- + +
1 | |
---------- + +
1行集(0秒)
提示:加密()只能用在*nix系统,因为它需要使用底层隐窝()库。