thinkphp mysql 密码加密_thinkphp 对数据库会员表的某几个字段进行数据加密解密。...

本文介绍了如何在ThinkPHP框架中实现对数据库中敏感字段(如手机号、身份证、银行卡号)的数据加密和解密,包括在保存数据时的加密、查询时的解密以及对查询和更新操作的自定义封装,确保数据安全。
摘要由CSDN通过智能技术生成

前几天经理突然说我有个注意,我们把我们客户的数据库里的几个主要字段进行加密吧,防止别人通过非法手段获取数据库后对客户有影响。

说做就做,我们初始决定对会员表的手机、身份证、银行卡号进行加密。

在会员生成保存数据库的时候,我们手动的把这3个字段通过加密保存到数据库里。会员表是inkks_users

加密方法是在网上找的,支持通过特殊字符串进行加密解密。在公共函数文件里添加了4个方法。

//数据库查询封装加密数据

function enWhereAndOr($options){

$jmarray=array("mobile","bankno","idcard");

foreach($jmarray as $v){

if(array_key_exists($v,$options['AND'])){

if(is_array($options['AND'][$v])){

$options['AND'][$v][1]=encrypt($options['AND'][$v][1]);

}else{

$options['AND'][$v]=encrypt($options['AND'][$v]);

}

}

if(array_key_exists($v,$options['OR'])){

if(is_array($options['OR'][$v])){

$options['OR'][$v][1]=encrypt($options['OR'][$v][1]);

}else{

$options['OR'][$v]=encrypt($options['OR'][$v]);

}

}

}

return $options;

}

//数据库修改封装加密数据

function enUpdate($data){

$jmarray=array("mobile","bankno","idcard");

foreach($jmarray as $v){

if(array_key_exists($v,$data)){

$data[$v]=encrypt($data[$v]);

}

}

return $data;

}

//数据库查询封装解密数据

function edList($resultSet){

$jmarray=array("mobile","bankno","idcard");

foreach($jmarray as $v){

foreach ($resultSet as $key => $val){

if(array_key_exists($v,$val)){

$resultSet[$key][$v]=encrypt($val[$v],"D");

}

}

}

return $resultSet;

}

//数据加密

function encrypt($string,$operation,$key=''){

//$key = $_SERVER['SERVER_NAME'];

$key = "192.168.0.192";//通过此处修改加密的key

$key=md5($key);

$key_length=strlen($key);

$string=$operation=='D'?base64_decode($string):substr(md5($string.$key),0,8).$string;

$string_length=strlen($string);

$rndkey=$box=array();

$result='';

for($i=0;$i<=255;$i++) {

$rndkey[$i]=ord($key[$i%$key_length]);

$box[$i]=$i;

}

for($j=$i=0;$i<256;$i++) {

$j=($j+$box[$i]+$rndkey[$i])%256;

$tmp=$box[$i];

$box[$i]=$box[$j];

$box[$j]=$tmp;

}

for($a=$j=$i=0;$i

$a=($a+1)%256;

$j=($j+$box[$a])%256;

$tmp=$box[$a];

$box[$a]=$box[$j];

$box[$j]=$tmp;

$result.=chr(ord($string[$i])^($box[($box[$a]+$box[$j])%256]));

}

if($operation=='D'){

if(substr($result,0,8)==substr(md5(substr($result,8).$key),0,8)){

return substr($result,8);

}else{

return'';

}

}else{

return str_replace('=','',base64_encode($result));

}

}

然后修改db里的 \thinkphp\library\think\db\Query.php 里的update和select

update 在生成UPDATE SQL语句之前进行判断修改

if($options['table']=="inkks_users"){

$data = enUpdate($data);

}

// 生成UPDATE SQL语句

$sql = $this->builder->update($data, $options);

select在执行查询操作的下边进行判断修改

// 执行查询操作

$resultSet = $this->query($sql, $bind, $options['master'], $options['fetch_pdo']);

if($options['table']=="inkks_users"){

$resultSet = edList($resultSet);

}

修改db里的 \thinkphp\library\think\db\Builder.php 里的update和select

在$sql的上边加上

if($options['table']=="inkks_users"){

$options['where']=enWhereAndOr($options['where']);

}

写到这里就ok了,只要不是原生态的sql 或者直接在where(‘’)里写  tp自动会通过判断会我们的数据进行加密解密。

写的不好,请多多指教。。。。。。

ThinkPHP v5.0 RC4 主要更新: [底层架构] 增加Request类 并支持自动注入 统一Composer的自动加载机制 增加Response类的子类扩展 增加File类用于上传和文件操作 取消模式扩展 SAE支持降权 优化框架入口文件 改进异常机制 App类输入/输出调整 单元测试的完美支持 增加新的控制台指令 取消系统路径之外的大部分常量定义 类库映射文件由命令行动态生成 包含应用类库 [数据库] 增加分规则方法 增加日期和时间达式查询方法 增加分页查询方法 增加视图查询方法 默认保持数据字段大小写 数据缓存自动更新机制 完善事务嵌套支持 改进存储过程数据读取 支持设置数据库查询数据集返回类型 [模型] 增加Merge扩展模型 模型支持动态查询 增加更多的类型自动转换支持 增加全局查询范围 toJson/toArray支持隐藏和增加属性输出 增加远程一对多关联 [其它] 日志存储结构调整 Trace调试功能从日志类独立并增强 原Input类功能并入Request类 类库映射文件采用命令行生成 包含应用类库 验证类的check方法data数据取消引用传参 路由增加MISS路由规则 路由增加路由别名功能 ThinkPHP软件介绍 ThinkPHP是一个免费开源的,快速、简单的面向对象的轻量级PHP开发框架,遵循Apache2开源协议发布,是为了敏捷WEB应用 开发和简化企业级应用开发而诞生的。拥有众多的优秀功能和特性,经历了三年多发展的同时,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和 改进,众多的典型案例确保可以稳定用于商业以及门户级的开发。 ThinkPHP借鉴了国外很多优秀的框架和模式,使用面向对象的开发结构和MVC模式,采用单一入口模式等,融合了Struts的 Action思想和JSP的TagLib(标签库)、RoR的ORM映射和ActiveRecord模式,封装了CURD和一些常用操作,在项目配置、类 库导入、模版引擎、查询语言、自动验证、视图模型、项目编译、缓存机制、SEO支持、分布式数据库、多数据库连接和切换、认证机制和扩展性方面均有独特的 现。 使用ThinkPHP,你可以更方便和快捷的开发和部署应用。当然不仅仅是企业级应用,任何PHP应用开发都可以从ThinkPHP的简单 和快速的特性中受益。ThinkPHP本身具有很多的原创特性,并且倡导大道至简,开发由我的开发理念,用最少的代码完成更多的功能,宗旨就是让WEB应 用开发更简单、更快速。为此ThinkPHP会不断吸收和融入更好的技术以保证其新鲜和活力,提供WEB应用开发的最佳实践! ThinkPHP遵循Apache2开源许可协议发布,意味着你可以免费使用ThinkPHP,甚至允许把你基于ThinkPHP开发的应用开源或商业产 品发布/销售。 ThinkPHP页面展示 相关阅读 同类推荐:站长常用源码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值