'Read and decrypt.'

def read(self, cnt=None):

    if (cnt > (8 * 1024)):
        raise BadRarFile('Bad    count    to    header    decrypt    -    wrong    password?')
    if (cnt <= len(self.buf)):
        res = self.buf[:cnt]
        self.buf = self.buf[cnt:]
        return res
    res = self.buf
    self.buf = EMPTY
    cnt -= len(res)
    blklen = 16
    while (cnt > 0):
        enc = self.f.read(blklen)
        if (len(enc) < blklen):
            break
        dec = self.ciph.decrypt(enc)
        if (cnt >= len(dec)):
            res += dec
            cnt -= len(dec)
        else:
            res += dec[:cnt]
            self.buf = dec[cnt:]
            cnt = 0
    return res
