private function _readRecordData($data, $pos, $len)
	{
		$data = substr($data, $pos, $len);
		
		// File not encrypted, or record before encryption start point
		if ($this->_encryption == self::MS_BIFF_CRYPTO_NONE || $pos < $this->_encryptionStartPos) {
			return $data;
		}
	
		$recordData = '';
		if ($this->_encryption == self::MS_BIFF_CRYPTO_RC4) {

			$oldBlock = floor($this->_rc4Pos / self::REKEY_BLOCK);
			$block = floor($pos / self::REKEY_BLOCK);
			$endBlock = floor(($pos + $len) / self::REKEY_BLOCK);

			// Spin an RC4 decryptor to the right spot. If we have a decryptor sitting
			// at a point earlier in the current block, re-use it as we can save some time.
			if ($block != $oldBlock || $pos < $this->_rc4Pos || !$this->_rc4Key) {
				$this->_rc4Key = $this->_makeKey($block, $this->_md5Ctxt);
				$step = $pos % self::REKEY_BLOCK;
			} else {
				$step = $pos - $this->_rc4Pos;
			}
			$this->_rc4Key->RC4(str_repeat("\0", $step));

			// Decrypt record data (re-keying at the end of every block)
			while ($block != $endBlock) {
				$step = self::REKEY_BLOCK - ($pos % self::REKEY_BLOCK);
				$recordData .= $this->_rc4Key->RC4(substr($data, 0, $step));
				$data = substr($data, $step);
				$pos += $step;
				$len -= $step;
				$block++;
				$this->_rc4Key = $this->_makeKey($block, $this->_md5Ctxt);
			}
			$recordData .= $this->_rc4Key->RC4(substr($data, 0, $len));

			// Keep track of the position of this decryptor.
			// We'll try and re-use it later if we can to speed things up
			$this->_rc4Pos = $pos + $len;
			
		} elseif ($this->_encryption == self::MS_BIFF_CRYPTO_XOR) {
			throw new PHPExcel_Reader_Exception('XOr encryption not supported');
		}
		return $recordData;
	}