2012-05-02 19 views
1

クラスの割り当てについては、Amazonの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_fileread()によって返されるバイト配列でありますfile(infile, 'rb')コールで。
  2. self.header
  3. は、データファイル

私はちょうどself.header[0x3C:0x3C+8]は何を意味していることだ問題の最初の79バイトの値はありますか?

+0

'[0:78]'の長さは79ではなく78です。スライスには終了値が含まれていないので、 '0..77'です。 –

+0

@ MarkRansom、私が扱うほとんどのコードは、排他的ではなく、最後の値を含みます。先端に感謝します。 – Jason

答えて

8

オフセットとして16進リテラルを使用する点を除き、self.data_file[0:78]のように通常のスライスです。 0x3Cはベース10で60ですので、self.header[60:60+8]と同じです。

2

self.header[0x3C:0x3C+8]は、オフセット0x3Cから始まるheaderから8バイトの文字列を取得します。

関連する問題