PHP Classes
Icontem

File: gEncrypter.php


  Search   All class groups All class groups   Latest entries Latest entries   Top 10 charts Top 10 charts   Newsletter Newsletter   Blog Blog   Forums Forums   Help FAQ Help FAQ  
  Login   Register  
Recommend this page to a friend! ReTweet ReTweet Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Giulio Bai  >  gEncrypter  >  gEncrypter.php  
File: gEncrypter.php
Role: Class source
Content type: text/plain
Description: The main class file, needed to execute the script
Class: gEncrypter
Encrypt and decrypt text with pure PHP using a key
 

Contents

Class file image Download
<?php

/**
 * gEncrypter - PHP Class to encrypt and decrypt datas using a given key
 *
 * Tested and working on PHP 4.3.2 and higher
 *
 * LICENSE: This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License v2 as published by
 * the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 *
 * @author      Giulio Bai <slide.wow@gmail.com>
 * @copyright   (C)2007 Giulio Bai
 * @license     http://www.gnu.org/licenses/gpl.html GNU General Public License
 * @version     1.0
 * @link        http://hewle.com
 */
 

/**
 * Ecrypts and decrypts text using a user-provided key to create a new alphabet.
 * To get the original text the key is needed again and, if the keys match, 
 * the original text is given back.
 *
 * I haven't understood why, but certain characters (§, Â°, Â£, Ã¨, Ã©, Ã², Ã , Ã¹, Ã§)
 * can not be used and converted because it will return a blank space. However
 * I tested all the others chars and letters (both lowercase and uppercase) and
 * I found it works, converting text (and files too!) and then recreating the
 * original given entry. 
 *
 * @author      Giulio Bai <slide.wow@gmail.com>
 * @copyright   (C)2007 Giulio Bai
 * @license     http://www.gnu.org/licenses/gpl.html GNU General Public License
 * @version     1.0
 * @link        http://hewle.com
 */ 
class gEncrypter
{

    
/**
     * Key needed by the methods to encrypt and decrypt documents
     *
     * @var string
     */
    
var $key;
        
        
    
/**
     * Creates a new alphabet depending on the key provided.
     *
     * The process is something like the following:
     * Consider the key $key = "ilarvet"
     *    
     * The program creates an array using as indexes the chars of the key and
     * assigns to them the first letters of the alphabet, without any double char
     *
     * So the conv array will be
     * $conv = array(
     *            "i" => "b",
     *            "l" => "c",
     *            "a" => "d",
     *            "r" => "f",
     *            "v" => "g",
     *            "e" => "h",
     *            "t" => "j"
     *        );
     *
     * Then sobstitutes corresponding letters looking up for them into the conv array
     * a b c d e f g h i j k l m n o p q r s t u v w x y z 
     * d ? ? ? h ? ? ? b ? ? c ? ? ? ? ? f ? j ? g ? ? ? ?
     *
     * Assigns the already-known chars
     * a b c d e f g h i j k l m n o p q r s t u v w x y z 
     * d i l a h r v e b t ? c ? ? ? ? ? f ? j ? g ? ? ? ?
     *
     * Assigns to each letter its opposite in the sequence, avoiding already
     * assigned chars
     * a b c d e f g h i j k l m n o p q r s t u v w x y z
     * d i l a h r v e b t z c y x w u s f q j p g o n m k
     *
     * We now have a new alphabet!
     *
     * @return mixed the array of the new alphabet
     */    
    
function gMA()
    {
        
$key $this->key;
        
        
$a = array('a''b''c''d''e''f''g''h''i''j''k''l'
                   
'm''n''o''p''q''r''s''t''u''v''w''x',
                   
'y''z''A''B''C''D''E''F''G''H''I''J',
                   
'K''L''M''N''O''P''Q''R''S''T''U''V',
                   
'W''X''Y''Z''1''2''3''4''5''6''7''8'
                   
'9''0'',''.'';'':''-''_''!''$''%''&',
                   
'/','('')''=''?''^''*''+''['']''{''}',
                   
'<''>''|''\\''\'''"'' '
                  
);


        
// array of key's chars
        
$key_array = array();

        
// key conversion array
        
$conv = array();

        
// new alphabet
        
$new_a = array();

        
// not assigned chars
        
$na = array();


        
// Creates the key array
        
for ($i=0$i<strlen($key); $i++) {
            
$char substr($key$i1);

            if (!
in_array($char$key_array)) {
                
$key_array[$i] = $char;
            } else
                die(
"Check your key syntax!");
        }

        
// converts the letters already known in the new alphabet
        
for ($i=0$i<count($a); $i++)
            
$new_a[$a[$i]] = $a[$i];

        
// print_r($new_a);

        
$count 0;

        
// Back assignement in the new alpabet and filling the conv array
        
for ($i=0$i<strlen($key); $i++) {
            
$char substr($key$i1);
            
            while (
in_array($a[$count], $conv) || in_array($a[$count], $key_array))
                
$count ++;
            
            
$conv[$char] = $a[$count]; 
            
$new_a[$char] = $conv[$char];
            
            for (
$k=0$k<count($a); $k++)
                
$new_a[$new_a[$a[$k]]] = $a[$k];
        }


        
// Fills in the notassigned array
        
for ($i=0$i<count($a); $i++) {
            if (
$new_a[$a[$i]] == $a[$i])
                
$na[] = $a[$i];    
        }

        
$c count($na);

        
/**
         * Alphabet inversion process
         *
         * 1. take a letter
         * 2. has it changed from the original alphabet?
         *    YES -> 3. next letter
         *                ---> 2
         *    NO -> 4. take the opposite letter in the original alphabet
         *                5. is it already assigned to another letter?
         *                    YES -> 6. take the letter immediately before
         *                                ---> 5
         *                    NO -> assign to the first letter taken the free letter
         *                            ---> 3  
         */
        
for ($i=0$i<count($new_a); $i++) {
            if (
$new_a[$a[$i]] == $a[$i]) {
                
$new_a[$a[$i]] = $na[$c-1];
                
                
$c --;
            }
        }

        return 
$new_a;
    }


    
/**
     * Encrypts or decrypts datas depending on a certain key
     *
     * Makes a new alphabet depending on the key provided then replaces each char
     * in the text with its corresponding in the new alphabet.
     *
     * Please NOTE this function encrypts AND decrypts; this mean if the text
     * passed to it is already encrypted using this system and the same key, it
     * will return the original one, else it will return a text encrypted two
     * times using two DIFFERENT keys and you'll need two decryption to get the
     * original text back.
     *
     * If the text passed to the method isn't ecnrypted yet, it will return the
     * text encrypted once. The same thing happens if you use a key which match
     * the sequence of the original alphabet.
     *
     * @param string $string the text to encrypt/decrypts
     * @param string $key the string to use to encrypt/decrypt
     * @return string the string encrypted/decrypted
     */  
    
function gED($string$key)
    {    
        
$this->key $key;

        
$new_a $this->gMA();

        
$enc "";

        
// Creating the new text
        
for ($i=0$i<strlen($string); $i++) {
            
$cs substr($string$i1);

            
//  if ($cs == " ")
            //      $enc .= " ";
            //   else {    
                
$cs $new_a[$cs];
                
$enc .= $cs;
            
//   }
            
        
}

        
//  print_r($new_a);

        
return $enc;   
    }

}

?>

 
  Advertise on this site Advertise on this site   Site map Site map   Statistics Statistics   Site tips Site tips   Privacy policy Privacy policy   Contact Contact  

For more information send a message to :
info at phpclasses dot org.
Copyright (c) Icontem 1999-2009 PHP Classes - PHP Class Scripts
  PHP Book Reviews - Reviews of books and other products