如何对特殊字符进行 md5 加密 - 缩略图相关

如何对特殊字符进行 md5 加密 - 缩略图相关

我编写了一个脚本来为我的尼康原始文件 (.NEF) 生成自定义缩略图。到目前为止一切顺利。现在缩略图文件名必须是 NEF 图像绝对路径的 md5,如此处所述关联

我生成的 md5 与系统生成的不匹配,下面使用 .jpg 文件进行一些测试

path = 'file:///home/ricardo/Área de Trabalho/TempImgX/capa_site_01.jpg'

StrNoSpecial = 'file%3A%2F%2F%2Fhome%2Fricardo%2F%C3%81rea%20de%20Trabalho%2FTempImgX%2Fcapa_site_01.jpg'

print(hashlib.md5((path).encode()).hexdigest())
print(hashlib.md5((StrNoSpecial).encode()).hexdigest())

结果:

f9aa4e24d9942a1b120ecc5b7af360f9
5dd1386290a8ea7642d5864c349c28d4

缩略图文件夹中当前工作缩略图的 md5:

1f6cd39593b60e303d26856ffa471689

如您所见,哈希值不同。这里的问题出在特殊字符上吗?

答案1

文件名的正确编码似乎是:

file:///home/ricardo/%C3%81rea%20de%20Trabalho/TempImgX/capa_site_01.jpg

即:将所有空格替换为 ,%20并将 替换Á%C3%81。不要替换斜线/和冒号:。然后(在 bash 中):

filename="file:///home/ricardo/%C3%81rea%20de%20Trabalho/TempImgX/capa_site_01.jpg";
echo -n "$filename" | md5sum
1f6cd39593b60e303d26856ffa471689  -

作为@Rinzwind在评论中说,

不仅仅是{空格},还有! * ' ( ) ; : @ & = + $ , / ? % # [ ] 任何不在 AZ 中的字符(例如重音符号)[需要替换。]

不幸的是,您不能将此规则应用于完整的 URI, file:///home/ricardo/Área de Trabalho/TempImgX/capa_site_01.jpg因为这会产生效果 file%3A%2F%2F%2Fhome%2Fricardo%2F%C3%81rea%20de%20Trabalho%2FTempImgX%2Fcapa_site_01.jpg 并且不起作用。

相反,NEF/缩略图工具的算法似乎是这样工作的:

  1. 将文件名(如/home/ricardo/Área de Trabalho/TempImgX/capa_site_01.jpg)拆分为/几部分
  2. foreach 这样的部分用百分比编码替换所有奇怪的字符
  3. 重新连接零件/
  4. 前置file://
  5. 应用于md5结果字符串。

相关内容