PhotoCraft 下载的是不是官方版?校验 SHA256 和签名
确认下载到的 PhotoCraft 是未经改动的官方版本:各平台用 SHA256SUMS.txt 校验,Windows 看代码签名,macOS 看 Developer ID 签名和公证,Linux 用 GPG 签名核对。
下载到的 PhotoCraft 是不是官方版本、有没有被改过,你可以自己核对。storytold/photocraft GitHub 发布页上的每个版本都附有 SHA256SUMS.txt,逐个列出文件的校验值,在任何平台上都能用它确认文件和项目发布的一字节不差。除此之外,Windows 的 MSI 和程序带有 Authenticode 代码签名,macOS 的应用和 DMG 用 Developer ID 签名并经过 Apple 公证,Linux 文件和 SHA256SUMS.txt 从 v0.20.2 起有 GPG 签名。本页按 v0.23.1(2026 年 11 月 12 日)的情况,说明每一项怎么查。
这些检查能说明文件从哪里来、是否完整,但不能保证软件没有 Bug。PhotoCraft 是开源软件(MIT OR Apache-2.0),正式版由项目公开的 GitHub Actions 工作流构建,每次发布的构建日志也都公开(v0.23.1 的构建记录)。
一览
| 下载文件 | SHA256SUMS.txt 里有校验值 | 签名 | 最快的查法 |
|---|---|---|---|
Windows .msi | 有 | Authenticode,签名者 Learning Machines Inc | 文件属性 › 数字签名 |
Windows 便携版 .zip | 有 | zip 本身没有签名,里面的 photocraft.exe 和 photocraft-cli.exe 有 | 先校验哈希,再看 exe 的签名 |
macOS .dmg 和 photocraft-cli zip | 有 | Developer ID Application: Learning Machines LLC(DJ6XS33FX8),已公证 | 对装好的应用运行 spctl -a -vv |
Linux AppImage、.deb、.rpm、Flatpak、tar.gz、Arch 软件包 | 有 | GPG,v0.20.2 起 | gpg --verify |
| FreeBSD tar.gz | 有 | 自身没有 | 校验哈希,配合 SHA256SUMS.txt.asc |
网页版 .zip | 有 | 自身没有 | 校验哈希,配合 SHA256SUMS.txt.asc |
官方版本从哪里来
PhotoCraft 的官方版本只以发布文件的形式出现在 github.com/storytold/photocraft/releases。项目的 getartcraft.com PhotoCraft 页面(README 推荐新用户从这里下载)链接的也是这些发布。photocraft.im 是非官方的社区指南,从下载页开始,本站所有下载链接都指向 GitHub 发布页,本站自己不提供任何安装包。
重新打包的版本,比如第三方 GitHub 仓库 awpde/photocraft-zh 里的“中文版”安装包,都不是 PhotoCraft 项目发布的。这并不是说制作者有什么问题,只是这些文件不在官方 SHA256SUMS.txt 里,下面任何一项检查都没法把它们和 PhotoCraft 团队对应起来。而且也用不着:每个官方版本都已内置简体中文和繁體中文,切换方法见界面语言设置。
在任何平台上校验 SHA-256
从同一个发布页下载 SHA256SUMS.txt,放到下载文件所在的目录。它每行是一个校验值加一个文件名,覆盖发布页上的其他所有文件,包括签名文件和签名公钥,只有 SHA256SUMS.txt.asc 不在其中。
Windows(PowerShell)。 算出哈希,再和该文件那一行对比:
Get-FileHash .\photocraft-0.23.1-windows-x64.msi -Algorithm SHA256
Select-String -Path .\SHA256SUMS.txt -SimpleMatch "photocraft-0.23.1-windows-x64.msi"
也可以让 PowerShell 自动比较,输出 True 就说明文件完好:
$file = "photocraft-0.23.1-windows-x64.msi"
$expected = (Select-String -Path .\SHA256SUMS.txt -SimpleMatch $file).Line.Split(' ')[0]
(Get-FileHash $file -Algorithm SHA256).Hash -eq $expected
macOS(终端)。 让 shasum 直接核对 DMG 那一行:
grep macos-universal.dmg SHA256SUMS.txt | shasum -a 256 -c
# photocraft-0.23.1-macos-universal.dmg: OK
Linux。 sha256sum 会核对目录里存在的、列表中列出的每个文件,其余的跳过:
sha256sum -c --ignore-missing SHA256SUMS.txt
FreeBSD。 用系统自带的 sha256 打印哈希,再和该文件那一行对比:
sha256 -q photocraft-0.23.1-freebsd-x86_64.tar.gz
grep freebsd-x86_64.tar.gz SHA256SUMS.txt
GitHub 自己记录的校验值。 GitHub 也会为每个发布文件记录 SHA-256,显示在发布页的文件旁边,API 里是 "digest": "sha256:…"。用 GitHub CLI 可以这样列出:
gh api repos/storytold/photocraft/releases/tags/v0.23.1 --jq '.assets[] | [.name, .digest] | @tsv'
本站在 2026 年 11 月 12 日对比过 v0.23.1,列表里的 50 个文件两边全部一致。比如 photocraft-web-0.23.1.zip,两边都是 3a498eb517bca6cec89f9c6b1fc6448269a05428c8a3a4637c16817da157f03c。
校验值一致,能证明文件就是发布页上的那个,但证明不了是谁放上去的,因为校验值列表也来自同一个页面。这要靠下面的签名。
各架构的文件名和分平台的步骤,见 Windows、macOS 和 Linux 下载页。
Windows:核对代码签名
发布工作流通过 packaging/windows/sign.ps1 用 signtool 先给 photocraft.exe 和 photocraft-cli.exe 签名,再签 MSI(SHA-256,带时间戳)。v0.23.1 的 x64 和 arm64 版本都是经微软的 Trusted Signing 服务签名的,发布日志显示两者的程序和 MSI 用的证书都颁发给 Learning Machines Inc。从 v0.22.0 起已经没有需要签名的 32 位 x86 版本(craft-common-actions#163);最后一个 x86 版本 v0.21.0 也是这样签名的。便携版 zip 作为文件没有签名,zip 本来也带不了 Authenticode 签名,但里面的两个程序有。调试用的 -symbols.zip 也没有签名。
在资源管理器里。 右键 MSI(或便携版里的 photocraft.exe),选 属性。在 数字签名 选项卡里,签名者应为 Learning Machines Inc。选中它点 详细信息,Windows 应显示“此数字签名正常”(This digital signature is OK)。如果没有这个选项卡,说明文件没有签名。
在 PowerShell 里:
$sig = Get-AuthenticodeSignature .\photocraft-0.23.1-windows-x64.msi
$sig.Status
$sig.SignerCertificate.Subject
Status 必须是 Valid,Subject 必须以 CN=Learning Machines Inc 开头,两项都要看。只看 Valid 只能说明文件由某个受信任的证书签过名,别人签名的文件也会是这样。请以签名者的名称为准,不要看证书指纹或颁发机构,这些在不同版本之间可能会变。如果选择为所有用户安装、Windows 要求管理员权限,弹窗里“已验证的发布者”也是同一个名称。
即使签名没问题,Microsoft Defender SmartScreen 仍可能对 PhotoCraft 弹出警告(#8338),处理方法见故障排查里的 SmartScreen 警告。
macOS:核对 Developer ID 和公证
PhotoCraft.app 启用了 hardened runtime 并带安全时间戳签名,经过 Apple 公证,公证票据也装订(staple)在应用上。DMG 同样经过签名、公证和装订。v0.23.1 的文档里写明的签名身份是 Developer ID Application: Learning Machines LLC (DJ6XS33FX8),v0.23.1 的发布日志也显示应用、DMG 和 CLI 都以 Notarized Developer ID、来自 Learning Machines LLC 的身份通过了检查。DJ6XS33FX8 是 Team ID,应用内更新也认这个 ID(见下文)。
把应用拖进“应用程序”文件夹后,在终端运行:
codesign --verify --deep --strict --verbose=2 /Applications/PhotoCraft.app
spctl -a -vv /Applications/PhotoCraft.app
xcrun stapler validate /Applications/PhotoCraft.app
codesign最后应输出valid on disk和satisfies its Designated Requirement,说明签名之后应用包里没有任何文件被改过。spctl应输出accepted、source=Notarized Developer ID和origin=Developer ID Application: Learning Machines LLC (DJ6XS33FX8)。这就是打开应用时 Gatekeeper 做的检查。xcrun stapler validate应输出The validate action worked!,说明票据已装订,离线也能通过。xcrun需要 Apple 的命令行工具(Command Line Tools),第一次运行时 macOS 会提示安装。
只想看 Team ID,可以运行 codesign -dv --verbose=2 /Applications/PhotoCraft.app,找 TeamIdentifier=DJ6XS33FX8。想让 codesign 遇到其他签名者就直接报错(也就是应用内更新做的检查),用:
codesign --verify --deep -R '=anchor apple generic and certificate leaf[subject.OU] = "DJ6XS33FX8"' /Applications/PhotoCraft.app
打开 DMG 之前也可以先查:
spctl -a -t open --context context:primary-signature -vv photocraft-0.23.1-macos-universal.dmg
xcrun stapler validate photocraft-0.23.1-macos-universal.dmg
单独的 photocraft-cli-0.23.1-macos-universal.zip 里是一个裸二进制文件,带不了装订的票据,按 macOS 下载页的方法用 spctl --assess --type install -vv 检查。用 Homebrew 装的也是同一个官方 DMG,上面的命令照样适用。
Linux:核对 GPG 签名(v0.20.2 起)
从 v0.20.2(2026 年 11 月 5 日)起,发布工作流会先用一把 OpenPGP 密钥给 Linux 文件签名,再生成 SHA256SUMS.txt,然后给 SHA256SUMS.txt 本身签名。公钥是发布页里的 release-signing-key.asc:
| 项目 | 内容 |
|---|---|
| 名称 | ArtCraft Linux Release Signing Key(ed25519,2026 年 11 月 3 日创建) |
| 主密钥指纹 | 2B76 741B 414A AD6C D33E 6312 13A0 05C0 B9D7 C3ED |
| 签名子密钥 | 568D C1F6 8F8F AECC 797F 3C7B 006D AF6B B0EF 334E |
各类文件的签名如下,发布页上的每种架构都一样:
| 文件 | 签名 |
|---|---|
.AppImage、.AppImage.zsync | <文件名>.asc |
.deb | <文件名>.asc,另有内嵌的 _gpgorigin 签名(debsigs) |
.rpm | <文件名>.asc,另有内嵌的 RPM 签名 |
.flatpak | <文件名>.asc |
-linux-*.tar.gz | <文件名>.asc |
.pkg.tar.zst(Arch) | <文件名>.sig,二进制签名,放在 pacman 会找的位置 |
SHA256SUMS.txt | SHA256SUMS.txt.asc |
| FreeBSD tar.gz、Windows、macOS 和网页版文件 | 没有,由 SHA256SUMS.txt.asc 覆盖 |
从同一个发布页下载 release-signing-key.asc、SHA256SUMS.txt、SHA256SUMS.txt.asc 和你那个文件的签名,然后运行:
gpg --import release-signing-key.asc
gpg --verify SHA256SUMS.txt.asc SHA256SUMS.txt
gpg --verify photocraft-0.23.1-linux-x86_64.AppImage.asc photocraft-0.23.1-linux-x86_64.AppImage
Arch 软件包的 .sig 也可以用同样的 gpg --verify 核对。每次核对都应输出 Good signature from "ArtCraft Linux Release Signing Key",接着是 Primary key fingerprint: 2B76 741B 414A AD6C D33E 6312 13A0 05C0 B9D7 C3ED,把这一行和上表对一下。本站在 2026 年 11 月 12 日用 Windows 上 Git Bash 自带的 gpg 2.4 核对过:v0.23.1 的 SHA256SUMS.txt.asc 是这把密钥的有效签名,由上面的签名子密钥签出;11 月 9 日核对 v0.21.0 时也是如此。
gpg 还会提示 WARNING: This key is not certified with a trusted signature!,这是正常的,只表示你还没在自己的密钥环里把这把密钥标为可信。核对指纹就是用来代替这一步的。
SHA256SUMS.txt 的签名通过后,再用上面的 sha256sum -c 校验,就覆盖了列表里的所有文件。本身没有签名的文件就靠这种方式核对。
.rpm 的内嵌签名可以交给 rpm 检查,前提是先把公钥导入 RPM 密钥环。注意导入后,这把密钥会成为系统信任的 RPM 密钥之一:
sudo rpm --import release-signing-key.asc
rpm -K photocraft-0.23.1-linux-x86_64.rpm
需要注意:
- 公钥和文件来自同一个页面。 能替换文件的人也能替换公钥,所以只有从别的渠道拿到指纹来核对,签名才比校验值多证明一些东西。截至 v0.23.1,上游的 README 和文档都还没有公布这个指纹,也没有提到这些签名。上表的指纹取自 v0.20.2、v0.21.0 和 v0.23.1 的公钥文件,本站对比过,三者一致;v0.23.1 的文件和 v0.21.0 的逐字节相同。
- v0.20.1 及更早的版本没有签名。 它们只有
SHA256SUMS.txt。 - 应用内更新不检查这些签名。 在 Linux 上它只靠 SHA-256 校验(见下文)。
.oci-manifest.json和.oci.sig属于打包成 OCI 镜像的 Flatpak 版本。前者描述镜像,后者是针对ghcr.io/storytold/photocraft的容器镜像签名,Flatpak 从 OCI 远程仓库安装时检查的就是这种签名。安装发布页上的文件用不到这两个文件。
Linux 下载页在安装说明旁边也有同样的步骤。
FreeBSD
FreeBSD 的 tar.gz 自身没有签名:FreeBSD 没有给零散二进制文件签名的机制,FreeBSD 的构建任务也不签任何东西。按上文用 sha256 对照 SHA256SUMS.txt 校验 tar.gz,再用 gpg --verify SHA256SUMS.txt.asc SHA256SUMS.txt 核对列表本身(GnuPG 用 pkg install gnupg 安装)。v0.20.1 及更早的版本只能校验哈希。PhotoCraft 在 FreeBSD 上不能自动更新。
应用内更新会检查什么
帮助 › 检查更新…(Help › Check for Updates…)和更新提示用的是共享的 craft-update 库,版本是 v0.23.1 的 Cargo.toml 和 Cargo.lock 锁定的那个提交(6e03f65;v0.21.0 锁定的是 c5a1cbf)。安装任何东西之前,它会:
- 所有平台: 只从这个应用自己的发布下载地址下载,并把文件和公布的 SHA-256 对比,来源是 GitHub 记录的单文件校验值,或者发布里
SHA256SUMS.txt中该文件的那一行。两者都没有的发布,还没下载就会被拒绝;校验值列表存在却下载失败,算作出错,不会当成“没有校验值”放过。 - macOS: 从 DMG 里复制出新应用,要求它带有 Team ID 为
DJ6XS33FX8的有效 Developer ID 签名(包括内嵌代码),用的就是上面那条codesign要求。临时(ad-hoc)签名或其他开发者的签名都通不过。应用报告的版本号也必须和发布一致。 - Windows: 正在运行的程序、已安装的 exe 和新 MSI 都必须带有效的 Authenticode 签名,而且按证书的主体名称比较,必须来自同一发布者。自身没有签名的副本不会安装更新。便携版 zip 里的程序也要通过同样的检查。
- Linux: 只做 SHA-256 校验,不读取
.asc或.sig文件。从 v0.23.1 起能自己更新的 Flatpak 单文件包也是如此(#13322)。
这些检查都在替换任何文件之前完成。v0.22.0 改变的是更新什么时候生效:在 Windows 上,辅助程序在 PhotoCraft 退出时安装已校验的 MSI 或 zip;在 macOS 和 Linux 上,新版本在 PhotoCraft 退出后启动;下次启动时会报告是否成功(#12384)。各系统的下载页里有详细说明。
网页版与在线编辑器
网页版 photocraft-web-0.23.1.zip 自身没有签名。和其他文件一样对照 SHA256SUMS.txt 校验,再用 SHA256SUMS.txt.asc 核对这个列表。v0.23.1 的压缩包大小为 16,064,050 字节,SHA-256 为 3a498eb517bca6cec89f9c6b1fc6448269a05428c8a3a4637c16817da157f03c。
photocraft.im 的在线编辑器运行的就是这个压缩包。/online 页面会显示所运行的版本和来源压缩包的 SHA-256,你可以拿去和发布页对比。本站原样提供压缩包里的应用文件,去掉了压缩包里的部署示例和说明文档,另外加上从同一发布标签取来的上游许可声明。有一个文件会在第二个路径上提供:从 v0.17.0 起,官方网页版压缩包按原样部署无法启动,因为 app/photocraft-web.js 请求的是 app/snippets/…,而压缩包只在顶层有 snippets/(#10017,截至 2026 年 11 月 12 日仍未关闭)。浏览器请求 app/snippets/ 路径时,本站返回压缩包顶层的同一个文件,一字节不改。具体说明以及如何自行部署,见在本站使用,或自行部署。