2012-05-02 54 views
1

對於課堂作業,我正在分析亞馬遜的Kindle數字版權管理實施如何運作以及如何擊敗它。在我的研究中,我遇到了一組從加密中提取出書本數據的Python腳本。它符合我對解釋我的論文加密破解部分的需求。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]這個問題的價值?

+0

'[0:78]'的長度是78,而不是79.切片不包含結尾值,所以它是'0..77'。 –

+0

@MarkRansom,我使用的大多數代碼都具有包含的最後一個值,不是唯一的。謝謝你的提示。 – Jason

回答

8

這是一個正常的切片,像self.data_file[0:78],除了使用十六進制文字作爲偏移。 0x3C是以10爲底的60,因此它與self.header[60:60+8]相同。

2

self.header[0x3C:0x3C+8]將從header得到一個8字節的字符串,從偏移量0x3C開始。