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

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

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

在会员生成保存数据库的时候,我们手动的把这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自动会通过判断会我们的数据进行加密解密。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值