
snakemake早期文档中出现的非标准sha256字符串(如u98a9cjsd98saud090923ßkpoasköf9ß32)实为误输入,并非合法编码;正确用法应为标准的64字符十六进制字符串,例如9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08。
snakemake早期文档中出现的非标准sha256字符串(如u98a9cjsd98saud090923ßkpoasköf9ß32)实为误输入,并非合法编码;正确用法应为标准的64字符十六进制字符串,例如9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08。
在Snakemake的校验机制中,sha256=参数要求传入标准十六进制编码(hex-encoded)的SHA256摘要字符串,即长度为64、仅含[0-9a-f]字符的ASCII字符串。该格式与Python标准库hashlib.sha256().hexdigest()输出完全一致,也是业界通用表示方式。
例如,对明文b"test"计算SHA256:
import hashlib digest = hashlib.sha256(b"test").hexdigest() print(digest) # 输出:9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08
此字符串可直接用于Snakemake规则中:
rule verify_checksum:
output:
ensure("test.txt", sha256="9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08")
shell:
"echo 'test' > {output}"⚠️ 注意事项:
- 文档中曾出现的u98a9cjsd98saud090923ßkpoasköf9ß32等字符串不是Base64、不是UTF-8字节直写、也不是任何标准编码——经社区确认(PR #2987),它源于键盘误触(如德语键盘布局下乱按产生含ß、ö等Unicode字符的无效字符串),属于文档笔误,不可作为实际哈希值使用。
- Snakemake内部会对传入的sha256=字符串进行严格校验:若长度≠64或含非法字符(如ß、ö、大写字母等),运行时将抛出ValidationError。
- 建议始终通过代码生成校验值(而非手动输入),例如使用shasum -a 256 file.txt | cut -d' ' -f1或Python脚本预计算并写入Snakefile,避免人为错误。
总结:SHA256在Snakemake中唯一接受且唯一有效的编码形式是小写十六进制字符串(64字符)。任何其他形式(包括原始字节、Base64、URL-safe Base64、二进制字符串或键盘乱码)均不被支持,也不符合规范。请以权威实现为准,及时更新引用文档示例。

















