0%

在将 m3u8ts 等文件下载完毕后,通过以下命令转换成 mp4 格式视频。

1
$ ffmpeg -allowed_extensions ALL -protocol_whitelist "file,https,tls,http,crypto,tcp" -i ./index.m3u8_backup -c copy ~/Downloads/神奇女侠1984.mp4

但播放 mp4 视频时,发现没有对应中文字幕。但源网站是有的,说明字幕是单独加载的,未添加到视频流中。

阅读全文 »

探索 PHP 字符串压缩,与 node 中 zlib、pako 库压缩、解压缩处理。

  • DEFLATE,是一种使用 Lempel-Ziv 压缩算法(LZ77)和哈夫曼编码的压缩格式。详见 RFC 1951
  • ZLIB,是一种使用 DEFLATE 的压缩格式,对应 HTTP 中的 Content-Encoding: deflate。详见 RFC 1950
  • GZIP,也是一种使用 DEFLATE 的压缩格式,对应 HTTP 中的 Content-Encoding: gzip。详见 RFC 1952

Content-Encoding 中的 deflate,实际上是 ZLIB。ZLIB 和 GZIP 都是 RAW DEFLATE 的不同 Wrapper。

PHP 字符串压缩函数

  • gzcompress ,对应解压缩函数:gzuncompress,使用 raw ZLIB 数据格式。
  • gzdeflate,对应解压缩函数:gzinflate,使用 raw DEFLATE 数据格式。
  • gzencode,对应解压缩函数:gzdecode,压缩成 gzip 编码数据。
  • bzcompress,对应解压缩函数:bzdecompress,压缩成 bzip2 编码数据。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
echo base64_encode(gzdeflate('1234'));
// output: MzQyNgEA
echo gzinflate(base64_decode("MzQyNgEA"));
// output: 1234
echo base64_encode(gzdeflate('1234', 6, ZLIB_ENCODING_DEFLATE));
// output: eJwzNDI2AQAB+ADL
echo gzinflate(base64_decode("eJwzNDI2AQAB+ADL"));
// error: PHP Warning: gzinflate(): data error in php shell code on line 1

echo base64_encode(gzcompress('1234'));
// output: eJwzNDI2AQAB+ADL
echo gzuncompress(base64_decode("eJwzNDI2AQAB+ADL"));
// output: 1234

echo base64_encode(gzencode('1234'));
// output: H4sIAAAAAAAAAzM0MjYBAKPg45sEAAAA
echo gzdecode(base64_decode("H4sIAAAAAAAAAzM0MjYBAKPg45sEAAAA"));
// output: 1234

echo base64_encode(bzcompress('1234'));
// 因当前环境未激活 bzip2 支持,所以暂未测试。需在编译 PHP 时增加 `--with-bz2[=DIR]` 配置项。

pako

1
npm install pako@1.0.6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
const pako = require('pako');

function btoa(str) {
return Buffer.from(str).toString('base64');
}

function atob(b64Encoded) {
return Buffer.from(b64Encoded, 'base64');
}

var zipResult = btoa(pako.deflate("1234"));
console.log(zipResult);
// output: eJwzNDI2AQAB+ADL
var unzipResult = pako.inflate(atob("eJwzNDI2AQAB+ADL"), { to: 'string' });
console.log(unzipResult);
// output: 1234

var zipResult = btoa(pako.gzip("1234"));
console.log(zipResult);
// output: H4sIAAAAAAAAAzM0MjYBAKPg45sEAAAA
var unzipResult = pako.ungzip(atob("H4sIAAAAAAAAAzM0MjYBAKPg45sEAAAA"), {to: "string"});
console.log(unzipResult);
// output: 1234

zlib

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
const zlib = require('zlib');

function btoa(str) {
return Buffer.from(str).toString('base64');
}

function atob(b64Encoded) {
return Buffer.from(b64Encoded, 'base64');
}

var zipResult = btoa(zlib.deflateSync("1234"));
console.log(zipResult);
// output: eJwzNDI2AQAB+ADL
var unzipResult = zlib.inflateSync(atob("eJwzNDI2AQAB+ADL")).toString();
console.log(unzipResult);
// output: 1234

var zipResult = btoa(zlib.gzipSync(Buffer.from("1234")));
console.log(zipResult);
// output: H4sIAAAAAAAAAzM0MjYBAKPg45sEAAAA
var unzipResult = zlib.gunzipSync(atob("H4sIAAAAAAAAAzM0MjYBAKPg45sEAAAA")).toString();
console.log(unzipResult);
// output: 1234

参考

web 服务的版本号对于恶意的攻击者无疑是有帮助的,因为不同版本号或多或少有其对应的漏洞,一旦被恶意的攻击者发现将对线上服务造成严重危害。而隐藏服务版本号则有助于提升 web 的安全性。

阅读全文 »

通过 VirtualBox CentOS-8 虚拟机搭建VirtualBox CentOS-8 虚拟机配置 两篇文章成功搭建并简单配置了 CentOS 虚拟机,本篇将讲解如何将虚拟机共享给他人或者复制出多台虚拟机以供使用。

系统、软件版本:

  • System:macOS Majave 10.14.6
  • VirtualBox: 6.0.22 r137980 (Qt5.6.3)
阅读全文 »