Pro Tools(AVID的DAW软件)具有使用Unique ID
字段管理和链接到其所有唯一媒体的过程,该字段以umid
元数据块的形式嵌入到WAV文件中。在Pro Tools中检查特定文件,我可以看到文件的Unique ID
以11个字符串的形式出现,如下所示:rS9ipS!x6Tf
。
[当我检查WAV文件中的原始数据时,发现一个32字节的数据块-字符'umid'为4字节;以下数据块的大小为4个字节-24;然后是24字节的数据块,在Hex Fiend中进行检查后,看起来像这样:
00000000 0000002A 5B7A5FFB 0F23DB11 00000000 00000000
如您所见,只有9个字节包含任何非零信息,但这是以某种方式用于存储11个char Unique ID
字段的。在我看来,似乎正在做一些事情来解释原始数据以检索该唯一ID字符串,但是我对原始数据进行解码的所有尝试都没有取得任何成果。我尝试过使用https://gchq.github.io/CyberChef/在所有有意义的所有格式中运行它,但是没有任何东西可以为我指明正确的方向。我还尝试了以6位为增量查看数据,看是否以某种方式进行了压缩(9字节* 8位== 72 == 12块* 6位),但是还没有碰到任何运气。
因此,我想知道是否有人对如何最好地弄清这里可能发生的情况有任何具体的提示/技巧/建议-如何以一种可能使我最终获得足够信息的方式来解压缩这些数据生成这11个字符,我猜这很可能是UTF-8。
欢迎任何帮助/建议!谢谢。
[似乎只是base64编码,只是字符映射略有不同,这是我发现与Pro Tools最匹配的python实现。
char_map = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789#!"
def encode_unique_id(uint64_value):
# unique id is a uint64_t, clamp
value = uint64_value & 0xFFFFFFFFFFFFFFFF
if value == 0:
return ""
# calculate the min number of bytes
# needed store value for int
byte_length = 0
tmp = value
while tmp:
tmp =tmp >> 8
byte_length += 1
# calculate number of chars needed to store encoding
char_total, remainder = divmod(byte_length * 8, 6)
if remainder:
char_total += 1
s = ""
for i in range(char_total):
value, index = divmod(value, 64)
s += char_map[index]
return s
正在运行encode_unique_id(0x2A5B7A5FFB0F23DB11)
应该会给您rS9ipS!x6Tf