文档章节

PHP签名

Falltohim
 Falltohim
发布于 2017/04/07 14:30
字数 494
阅读 22
收藏 0
点赞 0
评论 0
<?php

class Sign {
 
    /**
     * 获取数据签名
     *
     * @param  array  $param  签名数组
     * @param  string $code      安全校验码
     * @param  string $sign_type 签名类型
     * @return string        签名字符串
     */
    public static function getSign($param, $code, $sign_type = 'MD5'){
        //去除数组中的空值和签名参数(sign/sign_type)
        $param = self::paramFilter($param);
        //按键名升序排列数组
        $param = self::paramSort($param);
        //把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串
        $param_str = self::createLinkstring($param);
        //把拼接后的字符串再与安全校验码直接连接起来
        $param_str = $param_str . $code;
        //创建签名字符串
        return self::createSign($param_str, $sign_type);
    }
    
    /**
     * 校验数据签名
     *
     * @param  string $sign  接口收到的签名
     * @param  array  $param  签名数组
     * @param  string $code      安全校验码
     * @param  string $sign_type 签名类型
     * @return boolean true正确,false失败
     */
    public static function checkSign($sign, $param, $code, $sign_type = 'MD5'){
        return $sign == self::getSign($param, $code, $sign_type);
    }
    
    /**
     * 去除数组中的空值和签名参数
     *
     * @param  array $param 签名数组
     * @return array        去掉空值与签名参数后的新数组
     */
    private static function paramFilter($param){
        $param_filter = array();
        foreach ($param as $key => $val) {
            if($key == 'sign' || $key == 'sign_type' || !strlen($val)){
                continue;
            }
            $param_filter[$key] = $val;
        }
        return $param_filter;
    }
    
    /**
     * 按键名升序排列数组
     *
     * @param  array $param 排序前的数组
     * @return array        排序后的数组
     */
    private static function paramSort($param){
        ksort($param);
        reset($param);
        return $param;
    }
    
    /**
     * 把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串
     *
     * @param  array $param 需要拼接的数组
     * @return string       拼接完成以后的字符串
     */
    private static function createLinkstring($param){
        $str = '';
        foreach ($param as $key => $val) {
            $str .= "{$key}={$val}&";
        }
        //去掉最后一个&字符
        $str = substr($str, 0, strlen($str) - 1);
        //如果存在转义字符,那么去掉转义
        if(get_magic_quotes_gpc()){
            $str = stripslashes($str);
        }
        return $str;
    }
    
    /**
     * 创建签名字符串
     *
     * @param  string $param 需要加密的字符串
     * @param  string $type  签名类型 默认值:MD5
     * @return string 签名结果
     */
    private static function createSign($param, $type = 'MD5'){
        $type = strtolower($type);
        if($type == 'md5'){
            return md5($param);
        }
        if($type == 'dsa'){
            exit('DSA 签名方法待后续开发,请先使用MD5签名方式');
        }
        exit("接口暂不支持" . $type . "类型的签名方式");
    }
}

?>

 

本文转载自:

共有 人打赏支持
Falltohim
粉丝 0
博文 6
码字总数 1363
作品 0
石家庄
PHP通过exec函数实现对APK自动签名

公司开发的Android应用,因为在不同平台下签名文件不一样,需要分别进行签名,这个很麻烦,于是要求在公司的后台管理系统中能够对上传的APK文件,自动使用不同平台的签名文件完成签名,这样只...

tywali
2017/09/27
0
0
微信小程序/网站 上传图片到腾讯云COS

COS简介: 腾讯云提供的一种对象存储服务,供开发者存储海量文件的分布式存储服务。可以将自己开发的应用的存储部分全部接入COS的存储桶中,有效减少应用服务器的带宽,请求等。个人也可以通过...

皇冠小丑
05/13
0
0
PHP开发大发彩票源码搭建接口安全验证

php的大发彩票源码搭建接口 企 娥:217 1793 408 在实际工作中,使用PHP写api接口是经常做的,PHP写好接口后,前台就可以通过链接获取接口提供的数据,而返回的数据一般分为两种情况,xml和j...

我的女王
07/02
0
0
JavaScript 函数 encodeURI(), encodeURIComponent()的使用

JavaScript 函数 encodeURI(), encodeURIComponent()的使用 背景:这几天在使用 node 写代码, 数据全部是调用其他php系统的接口, 每次调用到要生产签名验证,所以遇到了问题: 在 php 中使用给接...

anziguoer
2016/06/14
22
0
微信小程序支付 后端PHP

前端:比较简单,在对应的支付事件上进行网络请求就好: 微信小程序支付 后端PHP(二) snippetid="2493544" snippetfilename="blog2017072219791311" name="code" class="javascript"> vie...

ufo00001
2017/07/22
0
0
php 隐藏后缀(.PHP)的方法过程

隐藏PHP 还可以把你在使用PHP 来驱动网站的这一事实隐藏起来,或者至少不那么明显。使用expose_php指令就能避免将php版本信息追加到Web 服务器签名的最后。不允许访问phpinfo()可以防止攻击者...

逸舟
2011/03/31
0
0
微信支付[签名错误]-微信,PHP,XMLPOST,加密

问个问题:[关于微信支付] 背景:现有一认证微信服务号,需要在自定义菜单跳转的网页中实现商城支付功能.商城使用PHP,MYSQL,实现 现在在做微信支付功能遇到问题. 1.目前在做微信公众号支付>>统一...

david_huang
2015/05/01
4.1K
4
PHP教程:PHPUnit学习笔记(一)PHPUnit介绍及安装

需求 PHPUnit 5.3 需要 PHP 5.6,强烈推荐使用最新版本的 PHP。 PHPUnit 需要使用 dom 和 json 扩展,它们通常是默认启用的。 PHPUnit 还需要 pcre、reflection、spl 扩展。这些标准扩展默认...

peasant
2014/11/07
0
0
PHP 支付类库 PaySDK v1.0.1,优化结果处理,修复问题

PHP 支付类库 PaySDK v1.0.1 已发布,更新内容如下: 新增checkResult、getError、getErrorCode用法 支付宝redirectExecute方法最后加上exit,防止有时无法跳转 完善补全支付宝SDK共有参数缺...

宇润
2017/11/17
977
11
PHP - ReflectorClass 反射类的作用

之前,我对一个新的缓存封装包写单元测试的时候(该包扩展了Memcached API),我遇到了重写Memcached::get()方法的问题。查看了PHP文档的Memcached::get()方法,有三个参数必须添加到我的扩展...

迷途d书童
2012/07/10
2.6K
7

没有更多内容

加载失败,请刷新页面

加载更多

下一页

eclipse SVN 项目重新定位

SVN 重新定位 1.方法一 首先:在Eclipse中选择Windows-> Show View->others 就会出现【SVN资源库/SVN Repositories】,选中后,点击确认; 然后:选中原有的地址,选择【重新定位/Relocate】...

qimh
13分钟前
0
0
Linux 第29课 ——Linux集群架构(下)

Linux集群架构(下) 八、DR模式搭建 8.1 准备工作 试验需求三台机器: 分发器,也叫调度器(简写为dir) 192.168.112.136 ying01 rs1 192.168.112.138 ying02 rs2 192.168.112.139 ying03 vip...

feng-01
19分钟前
0
0
轻松搭建svn版本管理工具+svnmanager管理客户端

前面的文章有写过svn版本管理工具的安装是基于svn的安装包进行安装,对于svn与apache的结合还得下svn和apache的模块进行结合过程比较繁琐,今天来介绍下通过centos的yum来安装svn能够快速安装...

javazyw
28分钟前
0
0
keepalived配置高可用集群

Linux集群概述 根据功能划分为两大类:高可用和负载均衡 高可用集群通常为两台服务器,一台工作,另外一台作为冗余,当提供服务的机器宕机,冗余将接替继续提供服务 实现高可用的开源软件有:...

TaoXu
33分钟前
0
0
mysql联表批处理操作

1 概述 mysql中的单表增删改查操作,可以说是基本中的基本. 实际工作中,常常会遇到一些基本用法难以处理的数据操作,譬如遇到主从表甚至多级关联表的情况(如一些历史问题数据的批量处理),考虑到...

社哥
36分钟前
0
0
IntelliJ IDEA 详细图解最常用的配置,适合刚刚用的新人。

刚刚使用IntelliJ IDEA 编辑器的时候,会有很多设置,会方便以后的开发,磨刀不误砍柴工。 比如:设置文件字体大小,代码自动完成提示,版本管理,本地代码历史,自动导入包,修改注释,修改...

kim_o
50分钟前
0
0
Google Java编程风格指南

目录 前言 源文件基础 源文件结构 格式 命名约定 编程实践 Javadoc 后记 前言 这份文档是Google Java编程风格规范的完整定义。当且仅当一个Java源文件符合此文档中的规则, 我们才认为它符合...

niithub
53分钟前
0
0
java.net.MalformedURLException异常说明

1.异常片段 Java代码中,在进行URL url = new URL(urllink)操作时,提示以下异常信息,该类异常主要问题出在参数urllink上面。 异常片段1 java.net.MalformedURLException at java.ne...

lqlm
53分钟前
1
0
CentOS7修改mysql5.6字符集

解决办法:CentOS7下修改MySQL数据库字符编码为UTF-8,UTF-8包含全世界所有国家所需要的字符集,是国际编码。 具体操作如下: 1.进入MySQL [root@tianqi-01 ~]# mysql -uroot -p Enter passw...

河图再现
55分钟前
0
0
DevExpress v18.1新版亮点——WPF篇(一)

用户界面套包DevExpress v18.1日前终于正式发布,本站将以连载的形式为大家介绍各版本新增内容。本文将介绍了DevExpress WPF v18.1 的新功能,快来下载试用新版本!点击下载>> Accordion Co...

Miss_Hello_World
57分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部