Fácil [PHP] Aprender a encriptar - [FACIL]

  • 2 Respuestas
  • 867 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

*

Desconectado .Ruz

[PHP] Aprender a encriptar - [FACIL]
« en: Julio 26, 2016, 08:15:03 am »
Vale, Gente de ForoZone, el día de hoy se presentará un pequeño tutorial de como encriptar en php.

Esto para que seria útil?
Bueno, seria muy bueno para el /client, de su holo para evitar ataques que podrían ser perjudicial para su servidor.

CONSTRUYENDO NUESTRA CLASE CIPHER “bytec.php”:

La estructura que tendra nuestra clase es la siguiente:

[Propiedades] { Data => “Mensaje en texto plano”, Key => “Clave de cifrado”, BlockSize => “Tamano del esquema de bloques de cifrado”, Mode => “Modo de operacion de una unidad de cifrado” }
La estructura de nuestra clase seria:
Spoiler para Oculto:
Citar
class Cipher {

    protected $cipher;
    protected $key;
    protected $blockSize;
    protected $data;
    private $iv;
    private $mode;

}

Tenemos definido los atributos de la clase Cipher, ahora hay que definir el constructor y los métodos esenciales.
Spoiler para Oculto:
Citar
public function __construct( $text = null, $key = null, $bsize = null, $mode = null ){

   // -> Default Options
   $this->setData( $text );
   $this->setKey( $key );
   $this->setCipher($bsize);
   $this->setMode( $mode );
   $this->setIV('');


 }

Luego solo implementamos los métodos de “set”, “get”, “encrypt” y “decrypt”. Debemos tener en cuenta que estamos trabajando con Mcrypt de PHP junto con Rinjdael en sus 3 bloque de bits.

Código de la clase Cypher completa:
Spoiler para Oculto:
Citar
/**
 * Encrypt Files Class
 * @author devpy
 * @version 1.0
 */
namespace Byte;
 
class Cipher {
 
    protected $cipher;
    protected $key;
    protected $blockSize;
    protected $data;
    private $iv;
    private $mode;
 
    public function __construct( $text = null, $key = null, $bsize = null, $mode = null ){
 
        // -> Default Options
        $this->setData( $text );
        $this->setKey( $key );
        $this->setCipher($bsize);
        $this->setMode( $mode );
        $this->setIV('');
 
 
    }
 
    public function setData( $text_plain ){
 
        if( !empty($text_plain) ){
            $this->data = $text_plain;
        }
 
    }
 
    public function setKey( $key ){
 
        $this->key = $key;
 
    }
 
    public function setMode( $mode ){
 
        switch( $mode ){
 
            case 'ecb':
                $this->mode = MCRYPT_MODE_ECB;
            break;
            case 'cfb':
                $this->mode = MCRYPT_MODE_CFB;
            break;
            case 'cbc':
                $this->mode = MCRYPT_MODE_CBC;
            break;
            case 'nofb':
                $this->mode = MCRYPT_MODE_NOFB;
            break;
            case 'ofb':
                $this->mode = MCRYPT_MODE_OFB;
            break;
            case 'stream':
                $this->mode = MCRYPT_MODE_STREAM;
            break;
            default:
                $this->mode = MCRYPT_MODE_ECB;
 
        }
 
    }
 
    public function setCipher( $blockSize ){
 
        switch( $blockSize ){
 
            case 128:
                $this->cipher = MCRYPT_RIJNDAEL_128;
            break;
            case 192:
                $this->cipher = MCRYPT_RIJNDAEL_192;
            break;
            case 256:
                $this->cipher = MCRYPT_RIJNDAEL_256;
            break;
            default:
                $this->cipher = MCRYPT_RIJNDAEL_128;
 
        }
 
    }
 
    private function getIV(){
 
        if( empty($this->iv) ){
            $this->iv = mcrypt_create_iv( mcrypt_get_iv_size($this->cipher, $this->mode ), MCRYPT_RAND);
        }
 
        return $this->iv;
 
    }
 
    public function setIV( $iv ){
 
        $this->iv = $iv;
 
    }
 
    public function val() {
 
        return ($this->data != null && $this->key != null && $this->cipher != null ) ? true : false;
    }
 
    public function encrypt(){
 
        if( $this->val() ){
 
            return trim(base64_encode(
                mcrypt_encrypt(
                    $this->cipher, $this->key, $this->data, $this->mode, $this->getIV())));
 
        }else{
 
            throw new Exception('[Invalid Options]');
 
        }
 
    }
 
    public function decrypt(){
 
        if( $this->val() ){
 
            return trim(mcrypt_decrypt(
                $this->cipher, $this->key, base64_decode($this->data), $this->mode, $this->getIV()));
 
        }else{
 
            throw new Exception('[Invalid Options]');
 
        }
 
    }
 
    private function generateUniqueKey( $length ){
 
        return substr( md5(uniqid(time())), $length);
 
    }
 
}

Para leer un archivo con PHP, debemos recurrir a la librería de tratamiento de archivos predefinada del lenguaje.
Spoiler para Oculto:
Citar
<?
$contents = file_get_contents('test.txt');
echo $contents, "/n";
?>

Si incorporamos este código a nuestro script principal, podemos cifrar el contenido del archivo y por ende descargarlo o guardar este en el servidor.

Spoiler para Oculto:
Citar
<?php
/**
 * Encrypt Files Class
 * @author devpy
 * @version 1.0
 */

// Incluir la clase Cipher
require_once './cypher/bytec.php';

// Instanciar la clase
$myCipher = new \Byte\Cipher;

// Establecer el texto, llave de encriptacion, size del bloque de bits, modo [ecb,cbc, etc...]
$contents = file_get_contents('test.txt');
$myCipher->setData($contents);
$myCipher->setKey('Mi clave secreta');
$myCipher->setCipher(256);
$myCipher->setMode('ecb');

$cifrado = $myCipher->encrypt();

echo "<strong>Texto Cifrado:</strong>\t", $cifrado , "<br/>";

$myCipher->setData($cifrado);

$texto = $myCipher->decrypt();

echo "<strong>Texto Descifrado con [key]:</strong>\t", $texto , "<br/>";

Finalmente, necesitamos testear nuestro codigo para comprobar que el contenido del archivo quede cifrado con una llave generada o pasada como argumento en el script.

Eso, es todo un ¡Saludo!
Creditos
Spoiler para Oculto:
.Ruz
« Última modificación: Agosto 14, 2016, 07:09:29 pm por xJosue- »

*

Desconectado Payasak0

Re:[PHP] Aprender a encriptar - [FACIL]
« Respuesta #1 en: Julio 26, 2016, 11:39:53 pm »
Un pedazo de post, pero también podria haberlo encriptado en base64, para mi es más comodo.

WINTXCODERS.COM || SEGURIDAD INFORMÁTICA.

*

Desconectado .Ruz

Re:[PHP] Aprender a encriptar - [FACIL]
« Respuesta #2 en: Julio 28, 2016, 06:43:13 am »
No tienes permiso para ver enlaces. Registrarme ó Logearme
Un pedazo de post, pero también podria haberlo encriptado en base64, para mi es más comodo.
Amigo! Tan bien seria una muy buena opción pero es como dicen por hay para gustos colores.
¡Un Saludo!

 

Temas relacionados

  Asunto / Iniciado por Respuestas Último mensaje
4 Respuestas
925 Vistas
Último mensaje Septiembre 09, 2016, 05:25:40 am
por Desconocido
5 Respuestas
1000 Vistas
Último mensaje Septiembre 09, 2016, 06:46:00 pm
por JoseReyes
1 Respuestas
1085 Vistas
Último mensaje Septiembre 18, 2016, 08:13:35 am
por Desconocido
3 Respuestas
526 Vistas
Último mensaje Junio 11, 2017, 03:55:33 pm
por Deps
4 Respuestas
288 Vistas
Último mensaje Octubre 11, 2018, 06:31:42 pm
por .Ruz