]> CyberLeo.Net >> Repos - Github/sugarcrm.git/blob - include/utils/encryption_utils.php
Release 6.4.0
[Github/sugarcrm.git] / include / utils / encryption_utils.php
1 <?php
2 if(!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point');
3 /*********************************************************************************
4  * SugarCRM Community Edition is a customer relationship management program developed by
5  * SugarCRM, Inc. Copyright (C) 2004-2011 SugarCRM Inc.
6  * 
7  * This program is free software; you can redistribute it and/or modify it under
8  * the terms of the GNU Affero General Public License version 3 as published by the
9  * Free Software Foundation with the addition of the following permission added
10  * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
11  * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
12  * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
13  * 
14  * This program is distributed in the hope that it will be useful, but WITHOUT
15  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
16  * FOR A PARTICULAR PURPOSE.  See the GNU Affero General Public License for more
17  * details.
18  * 
19  * You should have received a copy of the GNU Affero General Public License along with
20  * this program; if not, see http://www.gnu.org/licenses or write to the Free
21  * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
22  * 02110-1301 USA.
23  * 
24  * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
25  * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com.
26  * 
27  * The interactive user interfaces in modified source and object code versions
28  * of this program must display Appropriate Legal Notices, as required under
29  * Section 5 of the GNU Affero General Public License version 3.
30  * 
31  * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
32  * these Appropriate Legal Notices must retain the display of the "Powered by
33  * SugarCRM" logo. If the display of the logo is not reasonably feasible for
34  * technical reasons, the Appropriate Legal Notices must display the words
35  * "Powered by SugarCRM".
36  ********************************************************************************/
37
38 require_once('include/Pear/Crypt_Blowfish/Blowfish.php');
39
40 function sugarEncode($key, $data){
41         return base64_encode($data);
42 }
43
44
45 function sugarDecode($key, $encoded){
46         $data = base64_decode($encoded);
47         return $data;
48 }
49
50 ///////////////////////////////////////////////////////////////////////////////
51 ////    BLOWFISH
52 /**
53  * retrives the system's private key; will build one if not found, but anything encrypted before is gone...
54  * @param string type
55  * @return string key
56  */
57 function blowfishGetKey($type) {
58         $key = array();
59
60         $type = str_rot13($type);
61
62         $keyCache = "custom/blowfish/{$type}.php";
63
64         // build cache dir if needed
65         if(!file_exists('custom/blowfish')) {
66                 mkdir_recursive('custom/blowfish');
67         }
68
69         // get key from cache, or build if not exists
70         if(file_exists($keyCache)) {
71                 include($keyCache);
72         } else {
73                 // create a key
74                 $key[0] = create_guid();
75                 write_array_to_file('key', $key, $keyCache);
76         }
77         return $key[0];
78 }
79
80 /**
81  * Uses blowfish to encrypt data and base 64 encodes it. It stores the iv as part of the data
82  * @param STRING key - key to base encoding off of
83  * @param STRING data - string to be encrypted and encoded
84  * @return string
85  */
86 function blowfishEncode($key, $data){
87         $bf = new Crypt_Blowfish($key);
88         $encrypted = $bf->encrypt($data);
89         return base64_encode($encrypted);
90 }
91
92 /**
93  * Uses blowfish to decode data assumes data has been base64 encoded with the iv stored as part of the data
94  * @param STRING key - key to base decoding off of
95  * @param STRING encoded base64 encoded blowfish encrypted data
96  * @return string
97  */
98 function blowfishDecode($key, $encoded){
99         $data = base64_decode($encoded);
100         $bf = new Crypt_Blowfish($key);
101         return trim($bf->decrypt($data));
102 }
103
104 ?>