🔍 许可证查询与验证
通过哈希值查询对应的许可证版本,或通过章节 ID 查询当前生效的许可证。
📘 哈希算法说明
许可证版本使用 SHA3-384 算法锁定,确保内容不可篡改。完整的哈希流程如下:
- 预处理:移除许可证正文中的所有空白字符(空格、制表符、换行符、回车符等)
- 编码:将预处理后的字符串以 UTF-8 编码为字节数组
- 哈希:使用 SHA3-384 (Keccak) 算法计算 48 字节摘要
- 输出:将摘要转为 96 位十六进制字符串
⚠️ 注意:这不是单纯的 SHA3-384,而是先进行空白字符预处理再哈希。这意味着 "Hello World"、"HelloWorld" 和 "Hello World" 会产生相同的哈希值。
🐍 Python 参考实现
任何人可使用此独立验证许可证哈希值。此参考实现与系统使用的算法完全一致。
"""
ShitNovel 许可证哈希算法 — 参考实现
预处理规则:移除所有空白字符(空格、制表符、换行符、回车符、垂直制表符等)
哈希算法:SHA3-384 (Keccak)
编码:UTF-8
用法:
python hash_gen.py <文件路径> # 计算文件哈希
python hash_gen.py - # 从 stdin 读取
echo "content" | python hash_gen.py -
"""
import sys
import hashlib
import re
def preprocess(text: str) -> str:
"""移除所有空白字符"""
return re.sub(r'\s+', '', text)
def compute_hash(text: str) -> str:
"""先预处理,再用 SHA3-384 哈希,返回十六进制字符串"""
cleaned = preprocess(text)
return hashlib.sha3_384(cleaned.encode('utf-8')).hexdigest()
def hash_file(filepath: str) -> str:
"""读取文件并计算哈希"""
with open(filepath, 'r', encoding='utf-8') as f:
text = f.read()
return compute_hash(text)
if __name__ == '__main__':
if len(sys.argv) < 2:
print('用法: python hash_gen.py <文件路径>')
print(' python hash_gen.py - # 从 stdin 读取')
sys.exit(1)
if sys.argv[1] == '-':
text = sys.stdin.read()
print(compute_hash(text))
else:
filepath = sys.argv[1]
print(hash_file(filepath))
✅ 验证示例
python hash_gen.py LICENSES/CC_BY_4.0.txt
💡 在线查询
使用上方表单粘贴哈希值或内容进行查询