BudNote - 「 BudNote」 一个个人网站,叙述及记录生活周边。

前言

在配置简单图床(EasyImages2.0)的图片文件缓存规则时候,发现图片链接被加密隐藏后不容易配置缓存规则,由于需要动态请求 hide.php?key= 后才能得到图片,这使得缓存规则失效,导致每次请求都需回源,占用多余源服务器资源。为修改之前已加密过的图片链接地址,需要将加密后的链接进行解密,根据官方function.php中加解密代码,写了以下php脚本。代码支持主流的php版本,需要配置php的环境变量,仅在cli环境下运行,可自行添加http服务的支持,仅支持单链接解密,如需批量解密还需自行修改代码,或者借助AI工具修改代码。

使用

新建一个php文件,将文件命名为parse.php ,然后复制文末的php代码,写入其中。 在代码中找到 $key = crc32('这里填写你的key'); 并填写对应的值,key 在简单图床后台设置-账号密码 中获取。

在终端运行:

php parse.php "https://i.051214.xyz/app/hide.php?key=UUlpMW9qbDhSdlYwL1FjeUxtcFB1a0lEOTQvLzdrWnpPdz09"

显示结果如下:

https://i.051214.xyz/i/2023/12/23/sxnb71.webp

解密成功。

脚本代码

<?php
if ($argc != 2) {
    echo "Usage: php parse.php <URL>\n";
    exit(1);
}

$url = $argv[1];

// 解析 key 参数
$parsed_url = parse_url($url);
parse_str($parsed_url['query'] ?? '', $query);
$encoded = $query['key'] ?? '';

if (!$encoded) {
    echo "错误:URL 中未包含有效的 key 参数\n";
    exit(1);
}

// 解密 key
$key = crc32('这里填写你的key');
$iv = 'sciCuBC7orQtDhTO';
$decoded = base64_decode($encoded);
$decrypted = openssl_decrypt($decoded, 'AES-128-XTS', $key, 0, $iv);

// 检查是否以 /i/ 开头(兼容 PHP < 8)
if ($decrypted !== false && strpos($decrypted, '/i/') === 0) {
    $scheme = $parsed_url['scheme'] ?? 'https';
    $host = $parsed_url['host'] ?? '';
    echo "{$scheme}://{$host}{$decrypted}\n";
} else {
    echo "解密失败\n";
}

加密 解密 图床 php