domingo, marzo 26, 2006

Clase de PHP para encriptar y desencriptar cualquier cadena de texto

Hola.

Bueno quiero primero que todo dar las gracias a Kelvin por haberme facilitado su método de encriptación para implementarlo de VB en PHP, uff un tedioso pero emociante trabajo.

Quiero explicar como funciona la clase y que métodos deben invocar.

Archivo base donde esta el código de encriptación EnDecryptText.php

Antes de empezar se debe llamar a la clase desde la ruta donde se encuentre, para ello debes definirla de la siguiente forma:

require_once("EnDecryptText.php"); // Abre la instancia EnDecryptText.php.
$EnDecryptText = new EnDecryptText(); // Crea una nueva instancia de EnDecryptText.php.


Una vez hecho lo anterior, es cuestión de utilizar los dos métodos de la clase, los cuales son los siguientes:

Encrypt_Text y Decrypt_Text

Ahora bien como se invocan, veamos un ejemplo utilizando un ciclo for y con un dato venido desde un formulario html.

for ($i = 1; $i <= 12; $i++)
{
$sTemp = $EnDecryptText->Encrypt_Text($HTTP_POST_VARS["Chain"]);
echo $sTemp;
// Puedes también usarlo así $sTemp = $EnDecryptText->Encrypt_Text($Chain);
$rText = $EnDecryptText->Decrypt_Text($sTemp);
echo $rText;
}

El símbolo -> denota el apuntador de la clase, el cuál en los dos casos apuntan a las funciones de la clase Decrypt_Text y Encrypt_Text.

Bueno aquí un método más cotidiano programado en VB y PHP, un saludo.

 1: '* Private Variable
 2:  Private UserKeyAscii()  As String
 3:  Private TextAscii()     As String
 4: 
 5: Public Function Encrypt(ByVal String1 As String) As String
 6:  Dim k   As Long, Temp As Long, L As Long
 7:  Dim Rtn As String, iM As Integer
 8: 
 9:  '* Función que Encripta.
10:  EnCryIni String1
11:  iM = 0
12:  For k = 1 To Len(String1)
13:   L = IIf(L >= Len(String1), 1, L + 1)
14:   iM = iM + 1
15:   If (iM > Len(UserKey)) Then iM = 1
16:   Temp = CLng(TextAscii(L)) + CLng(UserKeyAscii(iM))
17:   If (k > Len(String1)) Then Exit For
18:   If (Temp > 255) Then Temp = Temp - 255
19:   Rtn = Rtn + Chr$(Temp)
20:  Next k
21:  Encrypt = Rtn
22: End Function
23: 
24: Public Function Decrypt(ByVal String1 As String) As String
25:  Dim k   As Long, L    As Long, Temp As Long
26:  Dim Rtn As String, iM As Integer
27: 
28:  '* Función que quita la Encriptación.
29:  EnCryIni String1
30:  iM = 0
31:  For k = 1 To Len(String1)
32:   L = IIf(L >= Len(String1), 1, L + 1)
33:   iM = iM + 1
34:   If (iM > Len(UserKey)) Then iM = 1
35:   Temp = Abs(CLng(UserKeyAscii(iM)) - CLng(TextAscii(L)))
36:   If (Temp < 0) Then Temp = Temp + 255
37:   Rtn = Rtn + Chr$(Temp)
38:  Next k
39:  Decrypt = Rtn
40: End Function
41: 
42: Private Sub EnCryIni(ByVal Text As String)
43:  Dim N As Long, k As Long
44: 
45:  '* Procedimiento Inicial de la Encriptación.
46:  N = Len(UserKey)
47:  If Not (N = 0) Then
48:   ReDim UserKeyAscii(1 To N)
49:  Else
50:   Exit Sub
51:  End If
52:  For k = 1 To N
53:   UserKeyAscii(k) = Asc(Mid$(UserKey, k, 1))
54:  Next k
55:  ReDim TextAscii(Len(Text)) As String
56:  For k = 1 To Len(Text)
57:   TextAscii(k) = Asc(Mid$(Text, k, 1))
58:  Next k
59: End Sub


1:  class encrypt_vb
2:  {var $UserKeyAscii;
3:   var $TextAscii;
4:   var $UserKey;
5: 
6: 
7:   function encrypt_vb()
8:   {$this->UserKeyAscii = array();
9:    $this->TextAscii    = array();
10:    $this->UserKey      = '';
11:   }
12: 
13:   //------------------------------------------------------------------------------------
14:   // Encripta una cadena de texto.
15:   //------------------------------------------------------------------------------------
16:   // Parámetros
17:   //------------------------------------------------------------------------------------
18:   // $String1: Cadena a encriptar.
19:   //------------------------------------------------------------------------------------
20:   function Encrypt($String1)
21:   {// Función que Encripta.
22:    if ($this->EnCryIni($String1) == false) return '';
23:    $iM = 0;
24:    $L  = 0;
25:    for ($k = 1; $k <= strlen($String1); $k++)
26:    {if ($L >= strlen($String1)) $L = 1;
27:     else $L++;
28:     $iM++;
29:     if ($iM > strlen($this->UserKey)) $iM = 1;
30:     $Temp = $this->TextAscii[$L] + $this->UserKeyAscii[$iM];
 31:     if ($k > strlen($String1)) break;
32:     if ($Temp > 255) $Temp -= 255;
33:     $Rtn .= chr($Temp);
34:    }
35:    return $Rtn;
36:   }
37: 
38:   //------------------------------------------------------------------------------------
39:   // Desencripta una cadena de texto.
40:   //------------------------------------------------------------------------------------
41:   // Parámetros
42:   //------------------------------------------------------------------------------------
43:   // $String1: Cadena a desencriptar.
44:   //------------------------------------------------------------------------------------
45:   function Decrypt($String1)
46:   {// Función que quita la Encriptación.
47:    if ($this->EnCryIni($String1) == false) return '';
48:    $iM = 0;
49:    $L  = 0;
50:    for ($k = 1; $k <= strlen($String1); $k++)
51:    {if ($L >= strlen($String1)) $L = 1;
52:     else $L++;
53:     $iM++;
54:     if ($iM > strlen($this->UserKey)) $iM = 1;
55:     $Temp = abs($this->UserKeyAscii[$iM] - $this->TextAscii[$L]);
56:     if ($Temp < 0) $Temp += 255;
57:     $Rtn .= chr($Temp);
58:    }
59:    return $Rtn;
60:   }
61: 
62:   //------------------------------------------------------------------------------------
63:   // Función iniciadora de la encriptación.
64:   //------------------------------------------------------------------------------------
65:   // Parámetros
66:   //------------------------------------------------------------------------------------
67:   // $Text: Cadena.
68:   //------------------------------------------------------------------------------------
69:   function EnCryIni($Text)
70:   {// Procedimiento Inicial de la Encriptación.
71:    $N = strlen($this->UserKey);
72:    if ($N == 0) return false;
73:    for ($k = 1; $k <= $N; $k++)
74:    {$tmp = ord($this->Mid($this->UserKey, $k, 1));
75:     $this->UserKeyAscii[$k] = $tmp;
76:    }
77:    for ($k = 1; $k <= strlen($Text); $k++)
78:    {$tmp = ord($this->Mid($Text, $k, 1));
79:     $this->TextAscii[$k] = $tmp;
80:    }
81:    return true;
82:   }
83: 
84:   //------------------------------------------------------------------------------------
85:   // Token principal de la cadena.
86:   //------------------------------------------------------------------------------------
87:   // Parámetros
88:   //------------------------------------------------------------------------------------
89:   // $Text: Cadena que permite encriptar otra cadena sumando sus carácteres.
90:   //------------------------------------------------------------------------------------
91:   function KeyToken($Text)
92:   {$this->UserKey = $Text;}
93: 
94:   //------------------------------------------------------------------------------------
95:   // Devuelve un número especificado de caracteres de una cadena.
96:   //------------------------------------------------------------------------------------
97:   // Parámetros
98:   //------------------------------------------------------------------------------------
99:   // $tmp:    Cadena.
100:   // $start:  Posición inicial en la cadena.
101:   // $length: Cantidad de carácteres de izquierda a derecha.
102:   //------------------------------------------------------------------------------------
103:   function Mid($tmp, $start, $length = '')
104:   {$start -= 1;
105:    if (is_string($length) == true) $length = strlen($tmp);
106:    $str = substr($tmp, $start, $length);
107:    return $str;
108:   }
109:  }