Python代码段的说明

时间:2012-05-02 22:40:44

标签: python

对于课堂作业,我正在分析亚马逊的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_fileread() file(infile, 'rb')电话上self.header返回的字节数组。
  2. self.header[0x3C:0x3C+8]是数据文件的前79个字节的值
  3. 我遇到的问题是{{1}}的含义是什么?

2 个答案:

答案 0 :(得分:8)

这是一个正常的切片,如self.data_file[0:78],除了使用十六进制文字作为偏移量。 0x3C在base10中为60,因此它与self.header[60:60+8]相同。

答案 1 :(得分:2)

self.header[0x3C:0x3C+8]将从header获取一个8字节的字符串,从偏移量0x3C开始。