1 | <?php |
---|
2 | /** |
---|
3 | * PHPExcel |
---|
4 | * |
---|
5 | * Copyright (c) 2006 - 2014 PHPExcel |
---|
6 | * |
---|
7 | * This library is free software; you can redistribute it and/or |
---|
8 | * modify it under the terms of the GNU Lesser General Public |
---|
9 | * License as published by the Free Software Foundation; either |
---|
10 | * version 2.1 of the License, or (at your option) any later version. |
---|
11 | * |
---|
12 | * This library is distributed in the hope that it will be useful, |
---|
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
---|
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
---|
15 | * Lesser General Public License for more details. |
---|
16 | * |
---|
17 | * You should have received a copy of the GNU Lesser General Public |
---|
18 | * License along with this library; if not, write to the Free Software |
---|
19 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
---|
20 | * |
---|
21 | * @category PHPExcel |
---|
22 | * @package PHPExcel_Reader_Excel5 |
---|
23 | * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) |
---|
24 | * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL |
---|
25 | * @version 1.8.0, 2014-03-02 |
---|
26 | */ |
---|
27 | |
---|
28 | /** |
---|
29 | * PHPExcel_Reader_Excel5_RC4 |
---|
30 | * |
---|
31 | * @category PHPExcel |
---|
32 | * @package PHPExcel_Reader_Excel5 |
---|
33 | * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel) |
---|
34 | */ |
---|
35 | class PHPExcel_Reader_Excel5_RC4 |
---|
36 | { |
---|
37 | // Context |
---|
38 | var $s = array(); |
---|
39 | var $i = 0; |
---|
40 | var $j = 0; |
---|
41 | |
---|
42 | /** |
---|
43 | * RC4 stream decryption/encryption constrcutor |
---|
44 | * |
---|
45 | * @param string $key Encryption key/passphrase |
---|
46 | */ |
---|
47 | public function __construct($key) |
---|
48 | { |
---|
49 | $len = strlen($key); |
---|
50 | |
---|
51 | for ($this->i = 0; $this->i < 256; $this->i++) { |
---|
52 | $this->s[$this->i] = $this->i; |
---|
53 | } |
---|
54 | |
---|
55 | $this->j = 0; |
---|
56 | for ($this->i = 0; $this->i < 256; $this->i++) { |
---|
57 | $this->j = ($this->j + $this->s[$this->i] + ord($key[$this->i % $len])) % 256; |
---|
58 | $t = $this->s[$this->i]; |
---|
59 | $this->s[$this->i] = $this->s[$this->j]; |
---|
60 | $this->s[$this->j] = $t; |
---|
61 | } |
---|
62 | $this->i = $this->j = 0; |
---|
63 | } |
---|
64 | |
---|
65 | /** |
---|
66 | * Symmetric decryption/encryption function |
---|
67 | * |
---|
68 | * @param string $data Data to encrypt/decrypt |
---|
69 | * |
---|
70 | * @return string |
---|
71 | */ |
---|
72 | public function RC4($data) |
---|
73 | { |
---|
74 | $len = strlen($data); |
---|
75 | for ($c = 0; $c < $len; $c++) { |
---|
76 | $this->i = ($this->i + 1) % 256; |
---|
77 | $this->j = ($this->j + $this->s[$this->i]) % 256; |
---|
78 | $t = $this->s[$this->i]; |
---|
79 | $this->s[$this->i] = $this->s[$this->j]; |
---|
80 | $this->s[$this->j] = $t; |
---|
81 | |
---|
82 | $t = ($this->s[$this->i] + $this->s[$this->j]) % 256; |
---|
83 | |
---|
84 | $data[$c] = chr(ord($data[$c]) ^ $this->s[$t]); |
---|
85 | } |
---|
86 | return $data; |
---|
87 | } |
---|
88 | } |
---|