PHP 如何实现接口加密以及加密注意事项
2017-03-09| 程成| 1161| 1| PHP技术

在app(ios和Android)需要调用我的接口,我需要返回相应的数据给他,我接口端通过php实现。


技术上没什么难的,主要是接口安全问题,别人会不会通过暴露的接口抓取我的数据,这是个问题。下面介绍最常用的一种接口加密方法,非常实用和安全。



首先直接上代码,如下



/**
* 核实token
* @DateTime:   2017-03-08 15:55:27
* @Author:  cc
*/
protected function checktoken($postData) {
    $token = $postData['token'];
    //加密
    asort($postData);
    $signature_key = 'abcdefg';
    $paras = "";
    foreach ($postData as $key => $value) {
        if ($key != 'token') {
            $paras .= !$paras ? $key . '=' . $value : '&' . $key . '=' . $value;
        }
    }
    $paras .= $signature_key;
    $signature = md5($paras);
    if ($signature != $token) {
        return false;
    } else {
        return ture;
    }
}


这个方法大致原理就是:


1、获取所有请求的数据postData,一般是post过来的;

2、获取其中的token对应的值(这个token就是一个md5加密串)

3、将数组按键名排序下,升降序随你,然后拼接起来,例如username=aaa&pwd=bbbb

4、将拼接起来的字符串加上一个双方约定好的加密字符串连接起来,然后md5这整个字符串,这里就是

md5(username=aaa&pwd=bbbbabcddfg)

5、最后拼接上去,username=aaa&pwd=bbbbabcddfg&token=...


调用接口那里也要这样获取token并传到接口那里,接口那里也要按照这个约定算出token,并且与post过来的token进行对比,如果不相等,则链接不合法,直接return false。


非常简单的方法,很实用也很安全。


注:


1、测试的时候,如果你是用get方法测试,但是接口那是post,接口那里获取参数你可以写成request;

2、写成request时候要注意,除了post和get外,cookie和sessionid也会被带过去,注意参数对应问题;

3、如果出现2问题,要么用其他模拟工具,模拟成post请求,比如postman;或者把参数自己获取过来,然后拼接成一个数组,传到checktoken方法里。


通过以上的方法就可以简单、安全、高效的实现接口安全。欢迎大家补充其他方法!


×
作者:程成
QQ:492245711