1

对于课堂作业,我正在分析亚马逊的 Kindle 数字版权管理实施的工作原理以及如何克服它。在我的研究中,我遇到了一组 Python 脚本,它们可以从加密中提取图书数据。它符合我解释论文中加密破解部分的需要。

问题是,我不流利地使用 Python,或者除了print 'Hello World'.

在通过源代码工作时,我遇到了这个片段

def __init__(self, infile):
    # initial sanity check on file
    self.data_file = file(infile, 'rb').read()
    self.mobi_data = ''
    self.header = self.data_file[0:78]

    if self.header[0x3C:0x3C+8] != 'BOOKMOBI' and self.header[0x3C:0x3C+8] != 'TEXtREAd':
        raise DrmException("invalid file format")

    self.magic = self.header[0x3C:0x3C+8]
    self.crypto_type = -1

我对代码的解释是这样的:

  1. self.data_file是调用时返回read()的字节数组。file(infile, 'rb')
  2. self.header是数据文件前79个字节的值

我遇到的问题是什么self.header[0x3C:0x3C+8]意思?

4

2 回答 2

8

这是一个普通的切片,就像self.data_file[0:78],除了使用十六进制文字作为偏移量。0x3C在 base10 中是 60,所以它与self.header[60:60+8].

于 2012-05-02T22:42:56.417 回答
2

self.header[0x3C:0x3C+8]header将从偏移量 0x3C 处得到一个 8 字节的字符串。

于 2012-05-02T22:43:06.587 回答