如何利用MySQLmysql 数据库加密自带加密函数进行加密

您所在的位置: &
MySQL加密方式
MySQL加密方式
陈小兵/范渊/孙立伟
电子工业出版社
《Web渗透技术及实战案例解析》第1章Web渗透必备技术,本章着重介绍有关网络渗透的一些基本知识和必备技术,由浅入深的介绍如何创建VPN服务器、如何使用VPN软件、如何利用软件来获取系统的密码、如何利用破解软件快速破解系统密码、MD5加密与破解、Serv-U密码破解,一句话后门的利用与操作等,这些基本知识和技术是网络渗透的基础。本节为大家介绍MySQL加密方式。
1.13.1& MySQL加密方式
MySQL数据库的认证密码有两种方式,MySQL 4.1版本之前是MySQL323加密,MySQL 4.1和之后的版本都是MySQLSHA1加密,MySQL数据库中自带Old_Password(str)和Password(str)函数,它们均可以在MySQL数据库里进行查询,前者是MySQL323加密,后者是MySQLSHA1方式加密。
(1)以MySQL323方式加密SELECT&Old_Password('');&
查询结果MySQL323 = 10cb38
(2)以MySQLSHA1方式加密SELECT&Password('');&
查询结果MySQLSHA1 = *A2EBAEADA8E6D1F7C5C
执行结果如图1-90所示,MYSQL323加密中生成的是16位字符串,而在MySQLSHA1中生存的是41位字符串,其中*是不加入实际的密码运算中,通过观察在很多用户中都携带了"*",在实际破解过程中去掉"*",也就是说MySQLSHA1加密的密码的实际位数是40位。
图1-90& 在MySQL数据库中查询同一密码的不同SHA值
【责任编辑: TEL:(010)】&&&&&&
关于&&的更多文章
本书全面讲解WPF的实际工作原理,是一本WPF权威著作。在紧贴实用
本书描述了黑客用默默无闻的行动为数字世界照亮了一条道路的故事。
SQL Server 2012附带了强大的Analysis Services新功能
本书通过对目前中国企业在风险管理和内部控制工作中的
解释ASP.NET MVC框架与"文件页"Web框架的不同之处
本书将介绍如何创建可交互的Web站点,包括从最简单的订单表单到复杂的安全电子商务站点。而且,读者还将了解如何使用开放源代码
51CTO旗下网站Discuz! 经典加密解密函数(带详解) - ThinkPHP框架
MySQL://Nginx:PHP@Linux&=&&开发交流Q群://可在配置文件里指定默认密钥
AU_KEY&=&&'2347adfas……&*('.//&$string:&明文&或&密文&&
//&$operation:DECODE表示解密,其它表示加密&&
//&$key:&密匙&&
//&$expiry:密文有效期&&
function&authcode($string,&$operation&=&'DECODE',&$key&=&'',&$expiry&=&0)&{&&
&&&&//&动态密匙长度,相同的明文会生成不同密文就是依靠动态密匙&&
&&&&$ckey_length&=&4;&&
&&&&//&密匙&&
&&&&$key&=&md5($key&?&$key&:&C('AU_KEY'));&&
&&&&//&密匙a会参与加解密&&
&&&&$keya&=&md5(substr($key,&0,&16));&&
&&&&//&密匙b会用来做数据完整性验证&&
&&&&$keyb&=&md5(substr($key,&16,&16));&&
&&&&//&密匙c用于变化生成的密文&&
&&&&$keyc&=&$ckey_length&?&($operation&==&'DECODE'&?&substr($string,&0,&$ckey_length):&substr(md5(microtime()),&-$ckey_length))&:&'';&&
&&&&//&参与运算的密匙&&
&&&&$cryptkey&=&$keya.md5($keya.$keyc);&&
&&&&$key_length&=&strlen($cryptkey);&&
&&&&//&明文,前10位用来保存时间戳,解密时验证数据有效性,10到26位用来保存$keyb(密匙b),解密时会通过这个密匙验证数据完整性&&
&&&&//&如果是解码的话,会从第$ckey_length位开始,因为密文前$ckey_length位保存&动态密匙,以保证解密正确&&
&&&&$string&=&$operation&==&'DECODE'&?&base64_decode(substr($string,&$ckey_length))&:&sprintf('%010d',&$expiry&?&$expiry&+&time()&:&0).substr(md5($string.$keyb),&0,&16).$&&
&&&&$string_length&=&strlen($string);&&
&&&&$result&=&'';&&
&&&&$box&=&range(0,&255);&&
&&&&$rndkey&=&array();&&
&&&&//&产生密匙簿&&
&&&&for($i&=&0;&$i&&=&255;&$i++)&{&&
&&&&&&&&$rndkey[$i]&=&ord($cryptkey[$i&%&$key_length]);&&
&&&&//&用固定的算法,打乱密匙簿,增加随机性,好像很复杂,实际上对并不会增加密文的强度&&
&&&&for($j&=&$i&=&0;&$i&&&256;&$i++)&{&&
&&&&&&&&$j&=&($j&+&$box[$i]&+&$rndkey[$i])&%&256;&&
&&&&&&&&$tmp&=&$box[$i];&&
&&&&&&&&$box[$i]&=&$box[$j];&&
&&&&&&&&$box[$j]&=&$&&
&&&&//&核心加解密部分&&
&&&&for($a&=&$j&=&$i&=&0;&$i&&&$string_&$i++)&{&&
&&&&&&&&$a&=&($a&+&1)&%&256;&&
&&&&&&&&$j&=&($j&+&$box[$a])&%&256;&&
&&&&&&&&$tmp&=&$box[$a];&&
&&&&&&&&$box[$a]&=&$box[$j];&&
&&&&&&&&$box[$j]&=&$&&
&&&&&&&&//&从密匙簿得出密匙进行异或,再转成字符&&
&&&&&&&&$result&.=&chr(ord($string[$i])&^&($box[($box[$a]&+&$box[$j])&%&256]));&&
&&&&if($operation&==&'DECODE')&{&&
&&&&&&&&//&substr($result,&0,&10)&==&0&验证数据有效性&&
&&&&&&&&//&substr($result,&0,&10)&-&time()&&&0&验证数据有效性&&
&&&&&&&&//&substr($result,&10,&16)&==&substr(md5(substr($result,&26).$keyb),&0,&16)&验证数据完整性&&
&&&&&&&&//&验证数据有效性,请看未加密明文的格式&&
&&&&&&&&if((substr($result,&0,&10)&==&0&||&substr($result,&0,&10)&-&time()&&&0)&&&&substr($result,&10,&16)&==&substr(md5(substr($result,&26).$keyb),&0,&16))&{&&
&&&&&&&&&&&&return&substr($result,&26);&&
&&&&&&&&}&else&{&&
&&&&&&&&&&&&return&'';&&
&&&&&&&&}&&
&&&&}&else&{&&
&&&&&&&&//&把动态密匙保存在密文里,这也是为什么同样的明文,生产不同密文后能解密的原因&&
&&&&&&&&//&因为加密后的密文可能是一些特殊字符,复制过程可能会丢失,所以用base64编码&&
&&&&&&&&return&$keyc.str_replace('=',&'',&base64_encode($result));&&
}这个函数还是非常给力的!DZ所有产品都是用的这个函数,摘过来分享下!
我一般用它来用于用户登陆和开发API时 防刷接口等。
积分:5696
ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。常见数据库加密技术对比
&摘要: 数据库加密作为近年来兴起的数据库安防技术,已经被越来越多的人所重视。这种基于存储层加密的防护方式,不仅可以有效解决数据库明文存储引起的泄密风险,也可以防止来自内部或者外部的入侵及越权访问行为。 从技术手段上来看,现今数据库加密技术主要有三大类,分别是前置代理及...
数据库加密作为近年来兴起的数据库安防技术,已经被越来越多的人所重视。这种基于存储层加密的防护方式,不仅可以有效解决数据库明文存储引起的泄密风险,也可以防止来自内部或者外部的入侵及越权访问行为。
从技术手段上来看,现今数据库加密技术主要有三大类,分别是前置代理及加密网关方式、应用层加密方式以及后置代理方式。这三类技术各自的特点如何,彼此之间孰优孰劣,下文详尽介绍。
前置代理及加密网关技术
该技术思路是在数据库之前增加一道安全代理服务,对数据库访问的用户必须经过该安全代理服务,在此服务中实现如数据加解密、存取控制等安全策略;然后安全代理服务通过数据库的访问接口实现数据在库中的最终存储。安全代理服务存在于客户端应用与数据库存储引擎之间,负责完成库中数据的加解密工作,加密数据存储在安全代理服务中。
这种技术也会存在一些问题和限制:
1)由于在安全增强代理中需要存储加密数据,因此要解决与数据库存储数据的一致性问题,这基本不可实现。
2)数据的联合检索问题:由于在数据库内外都存在数据,这些数据的联合检索将变得很困难;SQL语法的完全兼容也非常困难。
3)开发无法透明问题:数据库协议虽然存在标准,但事实上每个不同的数据库版本都会进行若干变更、扩展和增强,使用了这些特性的用户必须进行改造。同时在安全代理中对数据库通讯协议的模拟非常困难。
4)数据库的优化处理、事务处理、并发处理等特性都无法使用:查询分析、优化处理、事务处理、并发处理工作都需要在安全增强器中完成,无法使用数据库在并发处理和查询优化上的优势,系统的性能和稳定性更多地依赖于安全代理;
5) 对于对存储过程、触发器、函数等存储程序的实现支持也非常困难。
另外该技术需要在安全代理服务层提供非常复杂的数据库管理功能,如:SQL命令解析,通讯服务,加密数据索引存储管理、事务管理等等,因此存在巨大的开发工作量及很高的技术复杂度,此外还有类似于存储过程、触发器等无法解决的技术问题。
应用层加密技术
应用层加密的主要技术原理在于,应用系统通过加密API(JDBC,ODBC,C API等)对敏感数据进行加密,将加密数据存储到数据库的底层文件中;在进行数据检索时,将密文数据取回客户端,再进行解密。另外应用系统将自行管理密钥体系。
这种方案也存在明显缺陷,最主要的不足在于,应用程序必须对数据进行加解密,增加复杂度,而且无法对现有的系统做到透明,应用程序必须进行大规模的改造。从效率角度来看,这种技术方案无法利用的索引机制,后数据的检索性能将产生大幅度下降。
基于视图和触发器的后置代理技术
这种技术使用&视图&+&触发器&+&扩展索引&+&外部调用&的方式实现数据加密,同时保证应用完全透明。它的核心思想是充分利用数据库自身提供的应用定制扩展能力,分别使用其触发器扩展能力、索引扩展能力、自定义函数扩展能力以及视图等技术来满足数据存储加密,加密后数据检索,对应用无缝透明等最主要需求。
这种方案的技术原理主要有以下四个方面
(1)通过视图实现加密数据透明查询处理
数据库的视图可以实现对表内数据的过滤、投影、聚集、关联和函数运算。该方案正是通过数据库的视图原理实现对数据的透明访问;首先对将原有的表进行改名,然后在该表上建立与原表同名的视图;在视图内实现对敏感列的解密函数调用,实现数据的解密。
(2)通过触发器实现数据的加密插入和更新处理
数据库中的触发器可以实现对数据更新动作的特定行为的响应,同时数据库中可以支持针对视图的触发器。这种方案在建立的视图上建立Instead of触发器,通过Instead of触发器实现对明文数据的加密,将加密数据插入到表中。
(3)通过数据库的扩展索引接口实现加密索引
以数据库为例,在Oracle Data Cartridge的索引扩展机制提供了一套现成的框架,可以自己定义索引并实现Operator,自行编写索引在Create Index、Insert、Delete、Update语句执行、以及Scan Index发生时的相应处理代码。通过该机制,可以使用自定义的扩展加密索引,这样当使用该索引对加密数据进行检索时,可以进行正常的排序及比较,这也就解决了加密后数据检索的难题,大幅度提升了密文检索的效率。
(4)通过外部接口调用实现独立于数据库的权限控制和国产加密算法
在实现透明加密访问和高效索引访问之外,另一重要目的是实现对国产加密算法的调用和独立于数据库的权限控制。实现这一目的的技术关键是外部程序调用和外部通讯支持。在数据库中支持外部程序调用,只要定义好通讯接口即可。那么这种方案可以将加密函数和解密函数做成外部调用,这样不仅可以在外部调用国产加密设备的加密算法,还可以将权限校验过程放在数据库之外完成,确保了对超级用户的权限限制。
目前国内领先数据库安全厂商,安华金和数据库加密产品DBCoffer采用的即是这种技术的典型代表。
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467142',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'mysql双向加密解密方式用法详解
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了mysql双向加密解密方式用法,需要的朋友可以参考下
如果你使用的正是mysql数据库,那么你把密码或者其他敏感重要信息保存在应用程序里的机会就很大。保护这些数据免受黑客或者窥探者的获取是一个令人关注的重要问题,因为您既不能让未经授权的人员使用或者破坏应用程序,同时还要保证您的竞争优势。幸运的是,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()函数,它们的工作方式是相同的,但是加密强度更高。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具大数据观察专注于大数据方向,分享最具价值的大数据资讯,大数据应用;
同时整合大数据管理技术——云技术及其资讯与应用,提供电子商务、互联网金融,
工商等众多领域的经典案例助力广大用户攻坚大数据难题。
合作邮箱:
备案号:皖ICP备
版权所有,保留一切权利!
weixin-ext}

我要回帖

更多关于 mysql 数据库加密 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信