php数据接口api安全,API接口数据安全之授权码sign

**API接口数据安全之授权码sign**

>[success] 1. ASE加密方式加密

~~~

class Aes{

private $key = null;

/**

*@param String $key 密钥

*@return String

*/

public funciton __construct(){

//配置文件中的asekey 服务端及客户端必须保持一致 且加密key必须为16 、32、64位

$this->key = C('app.asekey');

}

/**

*加密

*@param String input 加密的字符串

*@param String key 解密的key

*@return HexString

*/

public function encrypt($input=''){

$size = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128,MCRYPT_MODE_ECB); // 获得加密算法的分组大小

$input = $this->pkcs5_pad($ipunt,$size);

$td = mcrypt_module_open(MCRYPT_RIJNDAEL_128,'',MCRYPT_MODE_ECB,'');

$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td),MCRYPT_RAND);

mcrypt_generic_init($td,$this->key,$iv);

$data = mcrypt_generic($td,$input);

mcrypt_generic_deinit($td);

mcrypt_module_close($td);

$result = base64_encode($data);

return $result;

}

/**

*填充方式 pkcs5

*@param String text 原始字符串

*@param String blocksize 加密长度

*@return String

*/

private function pkcs5_pad($text,$blocksize){

$pad = $blocksize-(strlen($text) % $blocksize);

return $text.str_repeat(chr($pad),$pad);

}

/**

*解密

*@param String str 加密的字符串

*@param String key 解密的key

*@return String

*/

public function decrypt($str){

$decryted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128,$this->key,base64_decode($str),MCRYPT_MODE_ECB);

$dec_s = strlen($decryted);

$padding = ord($decryted[$dec_s-1]);

$decryted = substr($decryted,0,-$padding);

return $decryted;

}

}

~~~

>[success]2.生成加密后的sign

~~~

/**

*生成请求的sign

*@param array $data

*@return string

*/

function setSign($data=array()){

//1.按字段排序

ksort($data);

// 2.拼接字符串数据 &

$string = http_build_query($data);

// 3.通过aes来加密

$sign = (new Aes())->encrypt($string);

return $sign;

}

//示例

$data = [

'did' => '12345dg',

'version' => '1.0'

];

$sign = setSign($data); //ne2qhhj4x3abeHKH+mhNV04USjWNzhkA5bcB7bxH4EA=

~~~

>[success]3.解密sign

~~~

$sign = "ne2qhhj4x3abeHKH+mhNV04USjWNzhkA5bcB7bxH4EA=";

echo (new Aes())->decrypt($sign); // did=12345dg&version=1.0

~~~

>[success]4.校验客户端的sign

~~~

/**

*@param Stirng clientSign 通过客户端的header头传递过来

*@param Array data 客户端提交过来的字段

*@return boolen

*/

function checkSign($clientSign='',$data=array()){

if(empty($clientSign)){

return false;

}

$checkSign = setSign($data); // 生成sign

if($clientSign != $checkSign){

return false;

}

return true;

}

~~~

**函数**

>[danger] parse_str() 函数的使用

~~~

$str = "did=12345dg&version=1.0";

parse_str($str,$arr);

var_dump($arr);die;

结果为:

array(2) {

["did"]=>

string(7) "12345dg"

["version"]=>

string(3) "1.0"

}

~~~

>[danger]http_build_query()函数的使用

~~~

$data = array(

'did'=> '12345dg',

'version'=> '1.0'

);

$str = http_build_query($data);

echo $str; // did=12345dg&version=1.0 将数组以&拼接

~~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/385857.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java环境变量的配置与详解,这些知识你必须拿下

1.三重心智模型 先给大家科普一个概念,“三重心智模型”。 认知科学家斯坦诺维奇,将人的心智模式,分成了三个部分。 第一层是自主心智,自主心智是我们通过进化与内隐学习获得。比如,我们看到蛇就会害怕,情…

centos php安装redis扩展,Centos7编译安装redis、php安装phpredis扩展

解压 进入 make:# tar zxvf redis-4.0.9.tar.gz# cd redis-4.0.9/# make# cd src# make install为了方便管理,将Redis文件中的配置文件和常用命令移动到统一文件中:# mkdir –p /usr/local/redis/bin# mkdir –p /usr/local/redis/etc# cp /t…

java环境变量的配置步骤,实现原理分析

1.笔试常见的问题? 面试常见的问题上面给的面试题链接基本都有。我只提几点: 写SQL:写SQL很常考察group by、内连接和外连接。手写代码:手写代码一般考单例、排序、线程、消费者生产者。我建议排序算法除了冒泡排序,…

php 方法参数传递,在PHP中将实例方法作为参数传递

我想创建一个Listener类class Listener {var $listeners array();public function add(callable $function) {$this->listeners[] $function;}public function fire() {foreach($this->listeners as $function) {call_user_func($function);}}}class Foo {public funct…

java环境安装包出现覆盖,请查收

正文 先问小伙伴们一个问题,登录难吗?“登录有什么难得?输入用户名和密码,后台检索出来,校验一下不就行了。”凡是这样回答的小伙伴,你明显就是产品思维,登录看似简单,用户名和密码…

java生成json字符串,威力加强版

策略 1——停止挖掘 Law of Holes 是说当自己进洞就应该停止挖掘。对于单体式应用不可管理时这是最佳建议。换句话说,应该停止让单体式应用继续变大,也就是说当开发新功能时不应该为旧单体应用添加新代码,最佳方法应该是将新功能开发成独立微…

MATLAB小波软硬阈值去噪代码,matlab编程小波变换进行图像去噪处理,包括各种软硬阈值的选取函数...

内容:matlab编程小波变换进行图像去噪处理,包括各种软硬阈值的选取函数,%小波阈值去噪clear allclc;fimread(graylena.bmp);fdouble(f);ssize(f);rimnoise2(gaussian,s(1),s(2),0,20);%填加高斯白噪声fnoisyfr;%对图像进行三层小波分解[c,s]w…

java生成二维码读取二维码,面试真题解析

拼多多一面 首先自我介绍 参加过哪些项目 并发编程三要素? 实现可见性的方法有哪些? 多线程的价值? 创建线程的三种方式的对比? 画出线程的状态流转图 常用的并发工具类有哪些? CyclicBarrier 和 CountDownLatch 的区…

iis 7.5 php 防止跨站,iis安全---防范XSS跨站式脚本攻击

iis安全---防范XSS跨站式脚本攻击网站要怎么防范常见的XSS跨站式脚本攻击呢,我们先从XSS跨站式脚本攻击的原理来说起。网站遭受XSS跨站式脚本攻击的基本原理1.本地利用漏洞,这种漏洞存在于页面中客户端脚本自身。其攻击过程如下所示:A给B发送…

Java春招实习面试经验汇总,面试篇

Part1 SpringIOC 学习Spring最重要的无非是Spring IOC以及Spring AOP,首先咱们把Spring IOC吃透,以下内容将截图展示。 Spring IOC主要学习内容分为以下7点: ①Spring框架 ②Spring lOC容器Bean对象实例化模拟实现 ③Spring IOC容器Bean对象…

Java最新大厂面试真题总结,瞬间高大上了!

什么是分布式锁?在回答这个问题之前,我们先回答一下什么是锁。 普通的锁,即在单机多线程环境下,当多个线程需要访问同一个变量或代码片段时,被访问的变量或代码片段叫做临界区域,我们需要控制线程一个一个…

php列表框怎么用,PHP+Mysql+jQuery查询和列表框选择操作实例讲解

这篇文章主要介绍了PHPMysqljQuery查询和列表框选择操作实现过程,需要的朋友可以参考下本文讲解如何通过ajax查询mysql数据,并将返回的数据显示在待选列表中,再通过选择最终将选项加入到已选区,可以用在许多后台管理系统中。本文列…

Java未来路在何方?图文详解!

Spring Security观后感——手绘思维脑(供参考) Spring Security手绘思维脑图 手绘的思维导图,是我自己根据自身的情况读完这套阿里出品的Spring Security王者晋级文档之后所绘的,相当于是一个知识的总结与梳理,我将其分为***“核心组件”与“…

matlab怎让3d旋转,如何在MATLAB中平滑旋转3D绘图?

我会说这是你正在绘制的大量积分导致经济放缓.一个选项是缩减采样..也可以使用较低级别的功能进行绘制(检查this related post以获得plot3 / scatter3 / line性能的比较).考虑以下针对速度优化的动画:[X Y Z] sphere(64);X X(:); Y Y(:); Z Z(:);%# set-up figu…

Java未来路在何方?挑战大厂重燃激情!

字节跳动一面: 自我介绍,主要讲讲做了什么和擅长什么看你项目做Spring比较多, 问一下Spring相关的东西, IoC是什么概念?Bean的默认作用范围是什么?其他的作用范围?索引是什么概念有什么作用? MySQL里主要有哪些索弓|结构?哈希索弓和B树索引比较?平常用线程主…

php如何修改文件名,php修改文件名的实现方法_后端开发

c是什么意思_后端开发C是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。php修改文件名的实现方法在php中可以使用rename函数修改文…

Java架构师必备框架技能核心笔记,工作感悟

01 kafka入门 1.1 什么是kafka 1.2 kafka中的基本概念 1.2.1 消息和批次 1.2.2 主题和分区 1.2.3 生产者和消费者、偏移量、消费者群组 1.2.4 Broker和集群 1.2.5 保留消息 02 为什么选择kafka 2.1 优点 2.2 常见场景 2.2.1 活动跟踪 2.2.2 传递消息 2.2.3 收集指标和日志 2.2.…

java将某个数按比例分配应用题,按比例分配应用题

按比例分配(一)1、甲乙两数的和是72,甲乙两数的比是4:5,甲、乙两数各是多少?。2、一个等腰三角形,顶角和一个底角的比是1:4,这个三角形两个底角各是多少。3、六(1)班有女生24人,女生和男生人数的比是4:5&am…

Java架构师必备框架技能核心笔记,附相关架构及资料

技术焦虑 现在的技术圈子很火热,任何技术点,任何知识,只要你肯搜索,都能找到资料。但是现在技术圈确实有一个不好的地方,就是贩卖焦虑。这种贩卖焦虑的点并不在于形式,而是一种普遍的心态。特别是对于那种…

php智能裁剪黑边,图片裁剪去除黑边

前言从浏览器保存的图片有透明度,但是python打开其透明通道是黑色的,因此我利用python的OpenCV模块去除了其上下左右的黑边。效果展示计算机中效果python打开效果python裁剪后效果代码import cv2def change_size(read_file):image cv2.imread(read_file…