php api加密方式,加密方式

## 1签名 & 数据加密

### 1.1 简介

1.第三方从融易推平台获取aes_iv,aec_key和请求签名密钥(sign_key)。

2.双方每次API交互都需要做请求签名、加密处理。

### 1.2 公共参数

| 参数 | 类型 | 必填 | 描述 |

| --- | --- | --- | --- |

| data | string | 是 | 加密数据 |

| random | string | 是 | 随机数32位 |

| sign | string | 是 | 签名 |

| channel | string | 是 | 接口对应名称 |

| timestamp | int | 是 | 时间戳 |

| token | string | 是 | 随机数32位 |

| partner | string | 是 | 第三方标识 |

| sync | bool | 是 | 是否同步,默认请传false |

### 1.3 签名算法及规则

#### 1.3.1 描述

将参数按照 key 首字母排序后连接成字符串,再拼接有服务端 供的签名 key,最后 MD5 得到签名结果。(sync不参与验签)

#### 1.3.2 参数示例

```php

{

"data":"Kdijdiwe78&*Wjslfds",

"random":"7737261D-0C27-1652-AE4D-78521ECD722C",

"channel":"register_user",

"timestamp":12313212312

}

```

假设签名key(sign_key) :

```

dsf123fsfk123SJD

```

签名结果(sign):

```

MD5('register_userKdijdiwe78&*Wjslfds7737261D-0C27-1652-AE4D-78521ECD722C12313212312dsf123fsfk123SJD');

```

#### 1.3.3 示例代码

```php

public function createKey($data) {

ksort($data);

return md5(implode('' ,$data).Config::get('api.sign_key'));

}

```

### 1.4 Data 参数加密算法及协商密钥

#### 1.4.1 描述

参数使用 AES 加密,解密 key 有服务端供,注意:在用 java 语言加密时要注意, AES/CBC/NoPadding 模式下当加密数据长度不是 16 的整数倍时不补 0,所以要实现长度不是 16 的整数倍,要自动补 0。

#### 1.4.2 代码示例

php 加密

```php

public static function apiEncrypt($data) {

$key = Config::get('api.aes_key');

$iv = Config::get('api.aes_iv');

$cipher = MCRYPT_RIJNDAEL_128;

$mode = MCRYPT_MODE_CBC;

$data=json_encode($data);

$encrypt_data = mcrypt_encrypt($cipher,$key, $data, $mode, $iv); $data= base64_encode($encrypt_data);

return $data;

}

```

php 解密

``` php

public function apiDecrypt($data) {

$key = Config::get('api.aes_key');

$iv = Config::get('api.aes_iv');

$cipher = MCRYPT_RIJNDAEL_128;

$mode = MCRYPT_MODE_CBC;

$data= base64_decode($data);

$encrypt_data = mcrypt_decrypt($cipher,$key, $data, $mode, $iv);

$encrypt_data = str_replace("\0","",$encrypt_data);

$data= json_decode($encrypt_data,true);

return $data;

}

```

#### 1.4.3 php7 代码示例

加密

```php

public function apiEncrypt($data)

{

$key = $this->initParams['aes_key'];

$iv = $this->initParams['aes_iv'];

$data=json_encode($data);

$message_padded = $data;

if (strlen($message_padded) % 16) {

$message_padded = str_pad($message_padded,strlen($message_padded) + 16 - strlen($message_padded) % 16, "\0");

}

$encrypt_data = openssl_encrypt($message_padded,"aes-128-cbc", $key,OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING, $iv);

$data= base64_encode($encrypt_data);

return $data;

}

```

解密

```php

public function apiDecrypt($data)

{

$key = $this->initParams['aes_key'];

$iv = $this->initParams['aes_iv'];

$data= base64_decode($data);

$decryptData = openssl_decrypt($data, "aes-128-cbc",$key,OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING, $iv);

$decryptData = str_replace("\0","",$decryptData);

$data= json_decode($decryptData,true);

return $data;

}

```

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值