利用MySQL加密函数保护Web网站敏感数据

原创 2007年09月28日 09:42:00
如果您正在运行使用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用作自己的脚本语言,那么可以像下面这样进行查询:  

  $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的Web应用程序,那么它把密码或者其他敏感信息保存在应用程序里的机会就很大。保护这些数据免受黑客或者窥探者的获取是一个令人关注的重要问题,因为您既不能让未经授权的人员使用或...
  • wzwfly
  • wzwfly
  • 2007年07月22日 16:15
  • 394

利用mysql加密函数保护网站敏感数据

利用MySQL加密函数保护网站敏感数据 收藏 如果您正在运行使用MySQL的Web应用程序,那么它把密码或者其他敏感信息保存在应用程序里的机会就...
  • falizixun2
  • falizixun2
  • 2011年04月07日 01:35
  • 319

利用mysql加密函数保护web网站敏感数据

  假如你正在运行使用mysql的web应用程序,那么你把密码或者其他敏感信息保存在应用程序里的机会就很大。保护这些数据免受黑客或者窥探者的获取是一个特别需要注意的问题,因为你既不能让未经授权的人员使...
  • Labber
  • Labber
  • 2008年03月14日 02:43
  • 181

java源码保护 加密 适应web ssh等

终于完成了加密,而且无任何错误日志,也适合 web sping struts .运行容器 tomcat qq 24268908...
  • iamfafa
  • iamfafa
  • 2015年07月27日 09:03
  • 1317

使用数据库加密保护敏感数据

使用数据库加密保护敏感数据数据加密概述: 为什么要对数据库进行加密? 数据面临的威胁和数据库加密的必要性-->渗透攻击、数据偷窃、数据存储设备失窃 80%的计算机犯罪来自系统内部,数据库管理员是否...
  • wpc820411
  • wpc820411
  • 2010年09月30日 14:23
  • 1005

如何为网站启用HTTPS加密传输协议

点击上方蓝字进行关注的都是靓仔和仙女呦 前言 当今时代对上网的安全性要求比以前更高,chrome和firefox也都大力支持网站使用HTTPS,苹果也从2017年开始在iOS 10系统中强...
  • TVwR8OfV0P
  • TVwR8OfV0P
  • 2017年11月27日 00:00
  • 184

敏感数据加解密及传输方案

1、敏感数据加解密采用单独服务的方式部署在公司内网,便于扩展被多个服务调用,部署在内网可以增加密钥的安全性;  2、外部调用服务与内部服务器之间数据传输采用非对称公私钥加密传输保证传输安全;  3、数...
  • tangaiun
  • tangaiun
  • 2015年10月19日 14:41
  • 1645

看好你的门-验证机制被攻击(10)-不够安全的敏感信息存储

如果应用系统以不安全的方式存储登陆用的敏感信息,即使验证过程本身有足够的安全,但是对系统而言,整体的安全性能也会被降低。 由于各种各样的原因,web应用系统通常以危险的方式将各种敏感信息存储在数据库...
  • ffm83
  • ffm83
  • 2015年03月09日 17:01
  • 739

mysql的加密函数

加密......\n 密......\n ......
  • rocky1996
  • rocky1996
  • 2017年07月18日 11:03
  • 472

利用加密保护SQL Server中的敏感数据

铃……一阵手机铃声响起,领导打来电话,语气比较沉重,CRM系统所使用的数据库被人无故做了分离以及重新附加的操作。这就意味着此数据库文件存在被复制的可能。这无疑是一个晴天霹雳的坏消息。作为国内比较大的汽...
  • u010305057
  • u010305057
  • 2013年05月02日 11:35
  • 390
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:利用MySQL加密函数保护Web网站敏感数据
举报原因:
原因补充:

(最多只允许输入30个字)