微信小程序请求加密

开始前,你要从 GitHub 上下载 cryptojs 到项目然后进行引入。

前端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// 模拟数据
const tmp_data = {
'name': 'hongfs',
};

// 对数据转换为 json 字符串然后再转换为 byte
const data = Crypto.charenc.UTF8.stringToBytes(JSON.stringify(tmp_data));

// KEY
const key = Crypto.charenc.UTF8.stringToBytes('p12bsog0qt8lfe53');
// IV
const iv = Crypto.charenc.UTF8.stringToBytes('t73e6qh8li0cnv2z');

// 对数据进行加密
const encrypt_data = Crypto.AES.encrypt(data, key, {
iv: iv,
mode: (new Crypto.mode.CBC(Crypto.pad.pkcs7))
});

// 模拟请求
wx.request({
url: 'http://127.0.0.1:8000',
method: 'POST',
header: {
'content-type': 'application/json' // 默认值
},
data: {
data: encrypt_data,
},
success (response) {
// 解密数据
// const decrypt_data = Crypto.AES.decrypt(response.data, key, {
// iv: iv,
// mode: (new Crypto.mode.CBC(Crypto.pad.pkcs7))
// });
},
});

后端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public function index()
{
$data = request()->input('data'); // laravel
// $data = input('post.data'); // thinkphp

if(!$data) {
return '参数错误';
}

# KEY
$key = 'p12bsog0qt8lfe53';
// IV
$iv = 't73e6qh8li0cnv2z';

// 对数据进行解密
$data = openssl_decrypt($data, 'AES-128-CBC', $key, 0, $iv);

if($data === false) {
return '数据解密失败';
}

// 解密后的数据转换成数组
$data = json_decode($data, true);

return '获取成功';

// 返回加密数据
$result = [
'code' => 1,
];

return openssl_encrypt(json_encode($result), 'AES-128-CBC', $key, 0, $iv);
}

评论