l1n6yun's Blog

记录学习的技能和遇到的问题

0%

在数字化时代,脚本编程在软件开发和自动化任务中扮演着至关重要的角色。然而,未加密的脚本代码面临着潜在的盗用和篡改风险,甚至可能导致敏感信息泄露。本文将探讨多种有效的脚本加密与编译技术,涵盖了Shell和Perl脚本的保护方法,旨在帮助开发者保护自己的代码和敏感信息。

Shell脚本加密与编译方法

使用shc工具

SHC(Shell Script Compiler)是一个开源工具,用于将Shell脚本编译成可执行文件。它将代码转换为C语言程序,然后再编译成二进制文件,以保护源代码。SHC的主要目的是提供一个简单的方式来保护Shell脚本代码,防止未经授权的访问和篡改。

  • SHC的功能:SHC将Shell脚本编译成二进制可执行文件,隐藏脚本的实现细节,并在编译过程中对脚本内容进行预处理和加密。

安装SHC

通过包管理器安装SHC(推荐):

1
2
3
4
5
6
# Ubuntu/Debian:
sudo apt-get install shc

# CentOS/RHEL
sudo yum install epel-release
sudo yum install shc

从源代码编译安装:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 安装必要的编译工具和库。包括 `gcc`(GNU C编译器)和 `make` 工具:
sudo apt-get update
sudo apt-get install build-essential

# 访问 SHC 的 GitHub 仓库,下载最新的源代码压缩包,或通过 `git` 克隆仓库。
git clone https://github.com/neurobin/shc.git
cd shc

# 编译 SHC:
make

# 安装 SHC,将编译的二进制文件移动到 `/usr/local/bin` 目录(或其他合适的目录):
sudo cp shc /usr/local/bin/

# 检查 SHC 是否安装成功:
shc -h

编译示例

脚本(hello.sh):

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
38
39
40
#!/bin/bash

# 检查是否为root用户
if [ "$EUID" -ne 0 ]; then
echo "请以管理员权限运行此脚本(使用sudo)!"
exit 1
fi

# 显示系统信息
echo "-----------------------------"
echo "系统信息"
echo "-----------------------------"
echo "当前用户: $(whoami)"
echo "系统时间: $(date)"
echo "操作系统版本: $(lsb_release -d | cut -f2)"

# 列出当前目录文件
echo "-----------------------------"
echo "当前目录中的文件:"
ls -1

# 用户选择文件
read -p "请选择一个文件以查看其内容 (输入文件名): " file_name

# 检查文件是否存在
if [ -f "$file_name" ]; then
echo "-----------------------------"
echo "文件内容: $file_name"
cat "$file_name"

# 将输出重定向到日志文件
echo "日志保存到 log.txt"
{
echo "文件内容: $file_name"
cat "$file_name"
} > log.txt

else
echo "文件不存在!"
fi

编译脚本:

1
shc -f hello.sh

将生成两个文件:hello.sh.x(可执行文件)和hello.sh.x.c(C源文件)。

执行编译文件:

1
./hello.sh.x

加密与编码

除了使用shc工具,还可以使用base64编码或openssl加密来增加脚本的安全性。

使用base64编码将脚本内容进行base64编码,并在运行时解码执行:

1
2
3
4
5
# 编码
base64 hello.sh > hello_base64.txt

# 解码并执行
base64 -d hello_base64.txt | bash

使用openssl工具对脚本进行对称或非对称加密,然后在运行时解密。例如:

1
2
3
4
5
# 加密
openssl aes-256-cbc -salt -in hello.sh -out hello.sh.enc

# 解密并执行
openssl aes-256-cbc -d -in hello.sh.enc | bash

Perl脚本加密与编译方法

PAR::Packer工具

PAR::Packer是一个Perl模块,用于将Perl脚本及其所有依赖打包成可执行的二进制文件。它分析Perl脚本,自动识别所用到的模块,并将这些模块打包在内,确保在目标环境中运行时可以找到。

  • 安装并使用
1
2
3
4
5
# 以使用 CPAN 安装:
cpan PAR::Packer

# 打包Perl脚本
pp -o hello.pxf hello.pl

perlcc编译器

perlcc是Perl语言的一个编译器,它可以将Perl脚本编译成C代码,然后进一步编译成可执行的二进制文件。然而,perlcc可能无法处理某些复杂的Perl特性或者特定模块,导致编译失败。

  • 编译过程示例
1
perlcc -o task_manager task_manager.pl

使用-d选项可以在编译时显示调试信息:

1
perlcc -d -o hello hello.pl

查看perlcc的更多选项和功能,可以使用以下命令:

1
perlcc -h

加密与解密技术

使用Crypt::CBC模块可以实现对数据的加密和解密。Crypt::CBC提供了基于块密码的加密和模式,常用的加密算法包括AES、DES等。

  • 安装Crypt::CBC
1
cpan Crypt::CBC

使用Crypt::CBC模块加密一个Perl脚本,涉及到定义一个加密的过程并将脚本本身保存为一个密文,然后可以在运行时解密并执行。这种做法只是为了保护源代码,这并不是一种绝对的安全措施,因为熟悉Perl的人仍然可以通过逆向工程等手段获取原始代码。

以下是使用Crypt::CBC加密和解密Perl脚本的示例代码:

加密脚本(encrypt_script.pl):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/perl
use strict;
use warnings;
use Crypt::CBC;
use MIME::Base64;
use File::Slurp;

# 配置加密参数
my $key = '*********'; # 选择一个合适的密钥
my $cipher = Crypt::CBC->new(
-key => $key,
-cipher => 'Crypt::AES',
);

# 读取原始脚本
my $script = read_file('task_manager.pl');

# 加密脚本
my $ciphertext = $cipher->encrypt_hex($script);
write_file('hello_encrypted.pl', $ciphertext);

print "Script encrypted and saved to hello_encrypted.pl\n";

解密并执行脚本(run_encrypted.pl):

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
#!/usr/bin/perl
use strict;
use warnings;
use Crypt::CBC;
use MIME::Base64;
use File::Slurp;

# 配置加密参数
my $key = '******'; # 确保与加密时的密钥一致
my $cipher = Crypt::CBC->new(
-key => $key,
-cipher => 'Crypt::AES',
);

# 读取加密脚本
my $ciphertext = read_file('hello_encrypted.pl');

# 解密
my $decrypted = $cipher->decrypt_hex($ciphertext);

# 执行解密后的脚本
eval $decrypted;
if ($@) {
die "Error executing decrypted script: $@";
}

运行解密并执行的脚本:

1
perl run_encrypted.pl

总结

脚本加密和编译技术为确保源代码安全性提供了有效的手段。本文详细介绍了使用流行工具和方法对Shell脚本和Perl脚本进行加密和编译的步骤,旨在帮助开发者保护自己的代码和敏感信息。

Pake 是一个基于 Rust 的工具,它允许开发者轻松构建轻量级的多平台桌面应用。以其小巧的体积和卓越的性能,Pake 成为了许多开发者的首选工具。本文将详细介绍 Pake 的特性、安装方法、使用指南以及如何进行定制开发,并特别强调快捷键的使用。

Pake 的特性

Pake 的核心特性包括:

  • 体积小:相比传统的 Electron 套壳打包,Pake 的体积小将近 20 倍,大约在 5M 左右。
  • 性能优异:Pake 的底层使用的是 Rust Tauri 框架,相较于 JavaScript 框架,它提供了更轻快的性能体验和更小的内存占用。
  • 功能丰富:Pake 不仅能打包应用,还实现了快捷键透传、沉浸式窗口、拖动、样式改写、去广告等功能,并支持产品的极简风格定制。
  • 简单易用:Pake 被描述为一个简单的小玩具,使用 Tauri 替代了传统的套壳网页打包思路,同时推荐使用 PWA(Progressive Web Apps)。

开始使用 Pake

安装 Pake CLI

Pake 提供了命令行工具,可以通过 npm 进行安装:

1
npm install -g pake-cli

命令行一键打包

使用 Pake 进行一键打包非常简单,以下是基本的命令使用示例:

1
pake url [OPTIONS]...

例如,如果你想打包 Weekly 应用,并隐藏标题栏,可以使用以下命令:

1
pake https://weekly.tw93.fun --name Weekly --hide-title-bar

快捷键说明

Pake 支持快捷键,以提高用户的工作效率。以下是 Pake 支持的快捷键及其功能:

Mac Windows/Linux 功能
⌘ + [ Ctrl + ← 返回上一个页面
⌘ + ] Ctrl + → 去下一个页面
⌘ + ↑ Ctrl + ↑ 自动滚动到页面顶部
⌘ + ↓ Ctrl + ↓ 自动滚动到页面底部
⌘ + r Ctrl + r 刷新页面
⌘ + w Ctrl + w 隐藏窗口,非退出
⌘ + - Ctrl + - 缩小页面
⌘ + + Ctrl + + 放大页面
⌘ + = Ctrl + = 放大页面
⌘ + 0 Ctrl + 0 重置页面缩放

高级使用

Pake 的代码结构和高级用法可以在其官方文档中找到。以下是一些关键点:

  • 修改 src-tauri 目录下的 pake.json 中的 url 和 productName 字段,并同步修改 tauri.config.json 中的 domain 字段。
  • 修改 tauri.xxx.conf.json 中的 icon 和 identifier 字段,图标可以从 icons 目录选择,或者从 macOSicons 下载。
  • 在 pake.json 中修改窗口属性,如 width/height、fullscreen、resizable 等。
  • 适配 Mac 沉浸式头部,可以将 hideTitleBar 设置为 true,并为 Header 元素添加 padding-top 样式。

结语

Pake 是一个强大的工具,它让构建轻量级多端桌面应用变得简单快捷。无论是小白用户、开发用户还是折腾用户,都能在 Pake 中找到适合自己的使用方式。希望这篇文章能帮助你更好地了解和使用 Pake,享受构建桌面应用的乐趣。

在数字时代,我们每天都在产生和消费大量的文本内容。无论是撰写报告、编写文档、还是记录个人笔记,一个高效、简洁且功能丰富的文本编辑器都是我们不可或缺的工具。今天,我要向大家介绍一款名为MarkText的开源Markdown编辑器,它以其出色的性能和优雅的设计,成为了文本编辑领域的一颗新星。

MarkText简介

MarkText是一款开源的Markdown编辑器,专注于速度和可用性。它支持多个操作系统,包括Linux、macOS和Windows,让不同平台的用户都能享受到流畅的写作体验。MarkText以其简洁的界面和实时预览功能,为用户提供了一种无干扰的写作环境,使得写作变得更加专注和高效。

核心特性

MarkText拥有许多令人印象深刻的特性,以下是其中的一些亮点:

  1. 实时预览:MarkText提供了所见即所得的实时预览功能,这意味着你在编辑器中输入的内容会立即反映在预览窗口中,让你可以即时看到最终的排版效果。
  2. 遵循Markdown规范:它支持CommonMark规范和GitHub Flavored Markdown规范,这意味着你可以使用MarkText来编写符合行业标准的Markdown文档。
  3. Markdown扩展:除了标准的Markdown功能,MarkText还支持数学表达式(通过KaTeX)、front matter和emoji等Markdown扩展,丰富了你的写作选项。
  4. 样式快捷方式:MarkText提供了段落和内联样式的快捷方式,帮助你提高写作效率。
  5. 输出格式多样:你可以将文档输出为HTML和PDF文件,满足不同场景的需求。
  6. 主题丰富:MarkText提供了多种主题,如Cadmium Light、Material Dark等,用户可以根据自己的喜好选择不同的主题。
  7. 编辑模式多样:包括源代码模式、打字机模式和专注模式,适应不同用户的写作习惯。
  8. 图片粘贴:直接从剪贴板中粘贴图片,简化了图片插入的过程。

下载与安装

MarkText的安装非常简单。对于macOS用户,你可以通过Homebrew-Cask安装:

brew install --cask mark-text

Windows用户可以下载安装向导并运行,或者使用Chocolatey和Winget等软件包管理器进行安装:

choco install marktext

或者

winget install marktext

Linux用户则可以按照官方提供的安装指南进行操作。

最新版本下载

想要获取MarkText的最新版本,你可以直接访问其GitHub发布页面:

MarkText GitHub Releases

在这里,你可以找到适用于不同操作系统的安装包,选择适合你的版本进行下载和安装。

在 Linux 系统中,Samba 是一个功能强大的服务,它允许 Linux 和 Windows 系统之间进行文件共享。通过 Samba,你可以轻松地在不同操作系统之间共享文件和打印机。本文将详细介绍如何在 Linux 上配置 Samba 服务,以实现文件共享。

安装 Samba

首先,你需要确保你的 Linux 系统上安装了 Samba。在基于 Debian 的系统(如 Ubuntu)上,你可以使用以下命令来安装 Samba:

1
2
sudo apt update
sudo apt install samba

这将安装 Samba 服务及其依赖项。

配置 Samba

安装完成后,你需要配置 Samba 以便它知道你想要共享哪些目录。这涉及到编辑 Samba 的配置文件 smb.conf

  1. 使用文本编辑器打开 smb.conf 文件。这里我们使用 vi 编辑器,但你也可以使用 nano 或其他你喜欢的编辑器:
1
sudo vi /etc/samba/smb.conf
  1. smb.conf 文件中,你可以定义多个共享部分,每个部分对应一个共享目录。以下是两个示例共享部分的配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[mnt-rw]
comment = Read-Write Mount Point
browseable = yes
path = /mnt
force user = root
create mask = 0775
directory mask = 0775
guest ok = Yes
read only = No

[onecloud-share]
comment = Read-Only OneCloud Share
browseable = yes
path = /mnt
guest ok = Yes
read only = yes
  • [mnt-rw] 部分定义了一个名为 mnt-rw 的共享,它指向 /mnt 目录。这个共享允许读写访问,并且对所有用户(包括匿名用户)开放。
  • [onecloud-share] 部分定义了另一个共享,它同样指向 /mnt 目录,但这个共享只允许读访问。

配置选项解释

  • browseable = yes:这个选项使得共享在网络浏览器中可见。
  • path = /mnt:指定共享的文件系统路径。
  • force user = root:强制所有连接到此共享的用户以 root 用户身份访问。
  • create mask = 0775directory mask = 0775:设置文件和目录的默认权限。
  • guest ok = Yes:允许匿名访问。
  • read only = No:对于 [mnt-rw] 共享,这个选项允许写入操作;对于 [onecloud-share] 共享,这个选项设置为 yes,表示只读。

启动 Samba 服务

配置完成后,你需要启动 Samba 服务以使更改生效:

1
sudo service smbd start

这个命令将启动 Samba 守护进程,使你的共享目录在网络上可用。

测试共享

在 Windows 系统上,你可以通过网络邻居访问这些共享,或者在文件资源管理器中输入共享的网络路径(例如 \\<Linux-Server-IP>\mnt-rw)来访问。

使用 OpenSSL 工具生成自签名 SSL 证书,为内网环境中的网站安全保驾护航

在内网环境中,使用 OpenSSL 工具进行自签名 SSL 证书的创建,能够为您的网站提供有效的安全保障。

自签证书流程

  1. 创建 ca 私钥。
  2. 基于 ca 私钥生成 ca 根证书。
  3. 构建 ssl 私钥。
  4. 生成 ssl 证书 csr。
  5. 运用 ca 根证书签署以获得 ssl 证书。

操作方法

  1. 创建 ca 私钥(强烈建议设置密码以增强安全性):
1
2
3
4
5
6
7
8
$ openssl genrsa -des3 -out root.key 2048
Generating RSA private key, 2048 bit long modulus
..............................................................+++
................+++
e is 65537 (0x010001)
Enter pass phrase for root.key:

Verifying - Enter pass phrase for root.key:
  1. 生成 ca 证书,自签 20 年有效期,并将此 ca 证书导入需要访问的 PC 的“受信任的根证书颁发机构”中,后续用此 ca 签署的证书均可正常使用:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ openssl req -x509 -new -nodes -key root.key -sha256 -days 7300 -out root.crt
Enter pass phrase for root.key:

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:CN # 国家
State or Province Name (full name) [Some-State]:SiChuan # 省份
Locality Name (eg, city) []:ChengDu # 城市
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Sichuan Lingyun Technology Co., LTD # 组织
Organizational Unit Name (eg, section) []: # 部门
Common Name (e.g. server FQDN or YOUR name) []:Sichuan Lingyun Technology Co., LTD # 公司
Email Address []: # 邮箱
  1. 完成上述步骤后,创建 ssl 证书私钥:
1
2
3
4
5
$ openssl genrsa -out server.key 2048
Generating RSA private key, 2048 bit long modulus
...................................................................................+++
..........+++
e is 65537 (0x010001)
  1. 随后创建 ssl 证书 csr:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ openssl req -new -key server.key -out server.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:SiChuan
Locality Name (eg, city) []:ChengDu
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Sichuan Lingyun Technology Co., LTD
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:Sichuan Lingyun Technology Co., LTD
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
  1. 创建域名附加配置信息,新建一个文件,通过 vim cert.ext ,将以下代码粘贴后保存:
1
2
3
4
5
6
7
8
9
10
11
12
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = localhost
IP.2 = 192.168.0.10
IP.3 = 192.168.1.200
DNS.4 = xa.it.com
DNS.5 = xiykj.com
DNS.6 = *.xa.com

需要注意的是,IP.2 = 192.168.11.100 表示 https 要访问的 IP 地址,IP.3 同理也是 IP 地址,ssl 证书允许自签多个 IP 地址,这便是自签 IP 的证书。而 DNS.4 = https://xa.it.com/ 则表示 https 要访问的域名,DNS.5、DNS.6 同理均为域名,ssl 证书也支持自签多个域名,此为自签域名的证书。

  1. 使用CA根证书签署ssl证书,自签ssl证书有效期20年:
1
2
3
4
5
$ openssl x509 -req -in server.csr -out server.crt -days 7300 -CAcreateserial -CA root.crt -CAkey root.key -CAserial serial -extfile cert.ext
Signature ok
subject=C = CN, ST = SiChuan, L = ChengDu, O = "Sichuan Lingyun Technology Co., LTD"
Getting CA Private Key
Enter pass phrase for root.key:
  1. 查看文件,通过执行“ls -al”命令
1
2
3
4
5
6
$ ls -al
cert.ext #ssl证书附加配置信息
serial #证书序列号
server.crt #ssl证书文件,包含公钥信息
server.csr #ssl证书签名文件
server.key #ssl证书私钥
  1. 查看签署的证书信息:
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
$ openssl x509 -in server.crt -noout -text
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
cd:ae:a9:3e:b7:bb:93:e1
Signature Algorithm: sha256WithRSAEncryption
Issuer: C = CN, ST = SiChuan, L = ChengDu, O = "Sichuan Lingyun Technology Co., LTD"
Validity
Not Before: Jul 18 06:26:05 2024 GMT
Not After : Jul 13 06:26:05 2044 GMT
Subject: C = CN, ST = SiChuan, L = ChengDu, O = "Sichuan Lingyun Technology Co., LTD"
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
00:aa:4e:ca:f5:0d:51:e7:b4:ba:3c:0b:6e:a5:4a:
d8:b4:0d:ad:19:54:3d:11:02:14:29:41:45:76:fc:
4a:b0:6c:5c:76:46:91:ff:8d:89:7a:f2:a8:62:73:
1d:c4:3a:96:8c:74:82:0a:e9:58:55:73:4a:4e:ec:
17:23:43:90:39:69:0e:aa:ac:ec:71:3e:60:e5:6b:
0c:e7:7b:f9:8f:93:db:a8:45:ae:d9:43:6f:f1:a1:
1c:01:0a:14:33:ce:4f:8c:81:f0:34:b5:cc:7c:81:
f6:91:1a:69:31:dc:8a:d1:c1:cc:34:6f:96:71:e0:
c2:86:79:37:47:a7:e4:c8:71:3f:44:82:38:7e:11:
4d:05:96:fd:01:d8:8c:8b:75:0b:bc:6e:ad:37:1d:
77:94:0b:2a:15:1a:43:3c:f6:59:61:eb:ea:8a:73:
54:06:b0:ed:70:11:77:42:57:59:e1:80:df:eb:0b:
36:d7:7b:d6:c8:53:20:e7:3a:cb:7c:95:67:ea:ff:
25:06:80:e9:93:b2:1d:a0:58:9f:ec:60:65:76:e8:
24:2c:14:9d:86:47:83:3b:b9:66:59:7d:69:b5:bd:
46:af:4f:15:a7:21:45:d1:8c:a1:9b:8b:73:20:94:
17:0e:1b:da:d2:e3:93:fb:98:d8:db:13:2b:ed:ff:
f5:95
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Authority Key Identifier:
keyid:8D:FB:23:BD:1D:AA:3B:C0:12:62:2A:15:8F:27:BF:81:EB:94:15:42

X509v3 Basic Constraints:
CA:FALSE
X509v3 Key Usage:
Digital Signature, Non Repudiation, Key Encipherment, Data Encipherment
X509v3 Subject Alternative Name:
DNS:localhost, IP Address:192.168.11.100, IP Address:192.168.10.200, DNS:xa.it.com, DNS:xiykj.com, DNS:*.xa.com
Signature Algorithm: sha256WithRSAEncryption
74:0f:a7:56:97:66:e1:8d:7a:5e:4e:7b:6f:b0:da:26:31:5c:
a3:77:9d:7f:25:19:1c:e2:cd:6a:ee:b3:9e:1f:55:3e:ea:8c:
05:5b:0f:9e:ac:f7:0f:72:8b:4c:6e:eb:20:4c:c3:d4:7b:d1:
63:79:54:dc:8d:46:f5:2e:73:fe:4f:5e:8f:d2:3c:54:47:90:
ae:cd:20:28:31:19:88:26:ec:46:86:1c:1e:ab:8b:67:77:d6:
81:1d:62:1b:59:7c:d6:4d:52:fe:44:b7:18:ce:6d:47:d3:34:
48:c8:59:c9:f9:3a:2a:41:9a:7c:50:c0:43:b0:6a:f4:3c:b1:
d5:49:f1:be:21:ae:b9:d8:72:48:19:f8:20:8c:3b:03:c5:c7:
26:0d:27:08:4d:0b:9e:27:ea:3c:bf:c3:09:07:fe:b0:68:9c:
76:1a:3f:49:44:af:67:9f:47:af:88:9f:50:25:1c:f4:a3:05:
b6:fb:1c:04:16:3d:6d:d3:ac:99:92:73:05:2f:c8:08:9a:e4:
88:e4:12:4d:f3:d0:aa:47:3c:eb:cf:9b:20:3a:88:e5:33:1b:
32:65:14:78:1d:c4:24:e8:63:e7:8e:18:b3:2b:bb:e2:94:38:
1d:dd:1f:f5:13:a2:db:ef:65:bc:12:a9:66:4f:48:15:57:e8:
82:79:24:a0
  1. 使用 CA 验证 ssl 证书状态,若显示“OK”则表示通过验证:
1
2
$ openssl verify -CAfile root.crt server.crt
server.crt: OK

最后,将 root.crt 导入到需要访问的客户端 PC 的“受信任的根证书颁发机构”中,同时将 server.crt、server.key 文件部署在服务器上即可。

PHPStorm 控制台出现乱码的情况,往往是由于控制台所采用的字符编码和输出内容的编码存在差异所致。比如说,控制台或许默认运用的是 GBK 编码,然而您的 PHP 代码输出的却是 UTF-8 编码的内容,抑或是其他的编码形式。

upload successful

开启 PHPStorm 的设置页面,在其中进行搜索“Console Encoding”,接着选中“Default Encoding”这一选项,并将“UTF-8”设定为默认编码。

upload successful

再次执行相关命令,此时控制台理应能够正常显示内容。

upload successful

是一个开源项目,用于破解和优化Windows系统上的Remote Desktop Protocol(远程桌面协议)。它允许你在没有官方许可的情况下,实现多用户的并发远程访问,这对于IT管理员、开发者或者需要频繁远程控制电脑的用户来说,是一个非常实用的工具。

项目简介

RDPWrap的主要功能是绕过Windows系统的限制,使得单个安装了RDP服务的计算机可以同时接受多个远程桌面连接,而无需购买额外的授权。该项目由Stas’M Sajewicz创建并维护,社区也在持续贡献和支持。

技术分析

RDPWrap的工作原理是通过对Windows的Remote Desktop Services(RDS)服务进行钩子处理,改变其内部的行为模式。它提供了一个配置工具,用于检测当前系统的支持情况,并更新本地的bypass.dll文件以启用多会话模式。此外,RDPWrap还包含一个实时更新的服务端口数据库,帮助用户跟踪最新的系统版本兼容性。

需要注意的是,由于涉及到系统底层操作,RDPWrap可能需要管理员权限运行,且在安装和配置过程中应谨慎操作,避免对系统稳定性产生影响。

应用场景

  1. 节省成本 - 对于拥有大量Windows设备但预算有限的企业,RDPWrap可以帮助他们避免购买昂贵的多用户许可证。
  2. 远程教育与培训 - 教师或教练可以同时监控多个学生的学习进度,提供即时反馈。
  3. 多用户共享 - 在家庭环境中,家庭成员可以在各自的设备上同时远程访问一台高性能主机进行游戏或计算任务。
  4. 服务器管理 - IT专业人员可以更方便地同时管理多台服务器,无需来回切换登录。

特点

  • 开源免费 - 开源意味着代码公开,用户可以自由查看,学习甚至改进。
  • 跨平台支持 - 支持多种Windows操作系统版本,从XP到最新的Windows 10。
  • 简单易用 - 提供直观的配置工具,即使是对技术不太了解的用户也能轻松设置。
  • 持续更新 - 社区活跃,不断跟进新的Windows更新,确保兼容性。

使用建议

在使用RDPWrap之前,请确保已理解其工作方式并做好数据备份,因为任何对系统核心组件的操作都可能存在风险。另外,尊重他人的版权,合法使用远程桌面服务,切勿用于非法目的。

总结来说,RDPWrap是一个强大且实用的工具,尤其适合需要高效远程管理Windows系统的用户。只要合理使用,它就能为你带来极大的便利。希望这篇介绍能够帮助你更好地理解和利用RDPWrap,享受更灵活的远程桌面体验。

项目地址:https://github.com/stascorp/rdpwrap

在当今快节奏的开发环境中,拥有一个功能强大且易于使用的工具箱对于提升工作效率至关重要。今天,我们将介绍一个轻量级、开源的前端工具箱——it-tools。这个工具箱专为开发者设计,旨在简化日常开发任务,无论是普通用户还是资深开发者都能从中受益。

upload successful

为什么选择 it-tools?

it-tools 以其简洁高效、一站式解决方案、跨平台支持和开源特性脱颖而出:

  • 简洁高效:提供众多常用小工具,降低学习和使用成本。
  • 一站式解决方案:一个界面解决多种需求,简化工作流程。
  • 跨平台支持:通过 web 端访问,支持多种操作系统和浏览器环境。
  • 开源且持续更新:社区活跃,功能不断扩展和优化。

部署方式

it-tools 作为一个基于 Web 的前端工具箱,提供了多种部署方式:

在线使用

最简单的部署方式是直接在线使用,无需本地部署。访问 https://it-tools.tech/ 即可立即开始使用所有功能,所有操作都在浏览器中完成。如果访问的语言不正确,可以在右上角切换。

Docker 部署

使用 docker 命令

1
2
3
4
docker run -d --name it-tools \
--restart unless-stopped \
-p 8080:80 \
corentinth/it-tools:latest

使用 docker-compose

1
2
3
4
5
6
7
8
9
version: '3.3'
services:
it-tools:
image: corentinth/it-tools:latest
restart: always
environment:
TZ: Asia/Shanghai
ports:
- 8080:80

本地编译部署

如果你想将 it-tools 部署到线上服务器供团队使用,可以按照以下步骤进行:

  1. 构建项目

首先生成项目的静态文件:

1
2
3
4
5
6
7
git clone https://github.com/CorentinTh/it-tools.git
cd it-tools
pnpm install
# 运行开发环境
pnpm dev
# 编译上线环境
pnpm build

如果你想开发自己的工具,还可以运行:

1
pnpm run script:create:tool my-tool-name
  1. 部署到服务器

将生成的 dist 文件夹中的静态文件上传到你的 Web 服务器(如 Nginx、Apache 等)。

  1. 配置服务器

在你的服务器配置文件中,将根目录指向 /opt/dist 文件夹。以 Nginx 为例:

1
2
3
4
5
6
7
8
9
server {
listen 80;
server_name 你的域名;

location / {
root /opt/dist;
index index.html;
}
}

保存配置并重启服务器,即可通过域名访问。

工具详细介绍

it-tools 涵盖了多个实用的前端工具,主要包括以下类别:

  1. Crypto 加密工具类:Token生成、Hash函数、UUID生成和文本加解密等功能。
  2. Converter 转换工具类:日期时间、数据格式(JSON、XML等)和颜色代码转换等工具。
  3. Web 工具类:URL编码/解码、HTML实体转义、HTTP状态码查询等Web开发相关工具。
  4. Images and videos 图片视频工具类:二维码生成、SVG占位符生成等功能。
  5. Development 开发工具类:代码格式化、端口生成等工具,帮助开发者简化日常任务。
  6. Network 网络工具类:IPv4子网计算器、MAC地址生成器等网络相关工具。
  7. Math 数学工具类:数学表达式计算、百分比计算等常用数学工具。
  8. Measurement 测量工具类:温度转换等测量单位转换工具。
  9. Text 文本工具类:文本统计、字符串混淆器等文本处理工具。
  10. Data 数据工具类:JSON转CSV、数据格式验证等数据处理工具。

总结

it-tools 已经提供了广泛的工具集合,帮助开发者在加密、格式转换、网络、开发辅助等领域提高工作效率。通过进一步扩展和细化每个工具的功能,可以增强其适用性和灵活性,满足更多复杂开发场景下的需求。这些扩展内容有助于让 it-tools 成为前端开发中更强大且实用的工具箱。

关于

随着时间的推移,个人站点的博客文章会越来越多,那怎么样才能快速找到你印象中的文章呢?增加一个站点内的搜索功能是非常有必要和方便的。
具体操作

  1. 安装搜索:在Hexo的根目录下,打开命令可执行窗口,执行如下命令:
1
npm install hexo-generator-searchdb --save
  1. 全局配置文件_config.yml,新增如下内容:
1
2
3
4
5
search:
path: search.xml
field: post
format: html
limit: 10000
  1. hexo主题配置文件(\themes\next_config.yml),修改local_search的enable为true:
1
2
3
4
5
6
7
8
9
10
11
12
13
# Local Search
# Dependencies: https://github.com/theme-next/hexo-generator-searchdb
local_search:
enable: true
# If auto, trigger search by changing input.
# If manual, trigger search by pressing enter key or search button.
trigger: auto
# Show top n results per article, show all results by setting to -1
top_n_per_article: 1
# Unescape html strings to the readable one.
unescape: false
# Preload the search data when the page loads.
preload: false