PHP Classes

File: gEncrypter.php

Recommend this page to a friend!
  Classes of Giulio Bai   gEncrypter   gEncrypter.php   Download  
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
Author: By
Last change:
Date: 17 years ago
Size: 7,893 bytes
 

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, $i, 1);

            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, $i, 1);
           
            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, $i, 1);

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

       
// print_r($new_a);

       
return $enc;
    }

}

?>