从 Day 0xA 开始撞墙,撞到今天总算解出来了
几个问题请让我娓娓道来
官方有提供加解密 DEMO 页:
一步一步地对,然而发现错的地方,就是昨天对到改的函数 calculateHashId
, encryptMessage
calculateHashId
昨天提到我这样写没有对齐 4 位对吧,於是加了 str_pad
函数来补完,但没想到的是,这个函数的第三个参数预设值为补右边,自己误会成字串靠右,左边补字
encryptMessage
昨天说要做key的排序对吧,请忘了吧,范例程序没有写要排序,自己以为需要跟 Sign 一样要排序,然後就各种爆炸
程序如下:
// app/Http/Controllers/Sinopac.php
...
public function calcHashId(): string
{
$a = $b = '';
$length = strlen($this->key_a1);
for ($i = 0; $i < $length; $i += 4) {
$part_of_a = dechex(hexdec(substr($this->key_a1, $i, 4)) ^ hexdec(substr($this->key_a2, $i, 4)));
$part_of_b = dechex(hexdec(substr($this->key_b1, $i, 4)) ^ hexdec(substr($this->key_b2, $i, 4)));
$a .= str_pad($part_of_a, 4, "0", STR_PAD_LEFT);
$b .= str_pad($part_of_b, 4, "0", STR_PAD_LEFT);
}
return strtoupper($a . $b);
}
...
public function encryptMessage($data, $key, $iv): string
{
$data = json_encode(array_filter((array)($data)));
$padding = 16 - (strlen($data) % 16);
$data .= str_repeat(chr($padding), $padding);
$encrypt = openssl_encrypt($data, 'AES-256-CBC', $key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING, $iv);
return strtoupper(bin2hex($encrypt));
}
...
用 Postman测试出来的结果,终於不是 E3501 – 讯息内容错误
了
今天在解不出来,真的会想放弃,错到一个怀疑人生
明天来把回覆的讯息解密以及完成验证吧
PHP extension 使用 C 语言遵循 PHP 介面开发让 PHP 功能增加的函式库, 一般...
BrowserStack 一个提供各式浏览器、移动装备的平台,前面虽然有稍微提到这个东西,不过都没什...
昨天我们写了第一个 GAS 程序: Hello World ,今天我们来拆解一下我们到底写了什麽东西...
前情提要 前一篇文章带大家看了Requests 库的使用,使用它发送了 GET POST 的请求,并...
在SQL中写法很重要,因为写法会影响着最後输出的结果 如果我们要写出自己的资料库就一定要先了解他们的...