sábado, 10 de junio de 2017

Mecanismos de Encriptacion y Funciones Hash

¿QUE ES ENCRIPTACION?
Encriptar es una manera de codificar la información para protegerla frente a terceros.
Por lo tanto, la encriptación informática sería la codificación la información de archivos o de un correo electrónico para que no pueda ser descifrado en caso de ser interceptado por alguien mientras esta información viaja por la red.
Es por medio de la encriptación informática como se codifican los datos. Solamente a través de un software de descodificación que conoce el autor de estos documentos encriptados es como se puede volver a decodificar la información.
Por lo que la encriptación informática es simplemente la codificación de la información que vamos a enviar a través de la red (Internet). Para poder descodificarla como dijimos es necesario un software o una clave que sólo conocen el emisor y el receptor de esta información.
La encriptación de la informática se hace cada vez más necesaria debido al aumento de los robos de claves de tarjetas de crédito, número de cuentas corrientes, y en general toda la información que viaja por la red, etc.
Todo esto ha fomentado que se quiera conseguir una mayor seguridad en la transmisión de la información sobre todo a través de Internet. Es por ello que las últimas versiones de los navegadores de Internet ya usan sistemas automáticos de encriptación de datos para que sea más difícil para los hackers robarlos.

En la actualidad existen empresas que se dedican a la encriptación de datos en discos duros enteros, particiones, dispositivos de almacenamiento USB, etc. Las empresas necesitan que su información relevante está a buen recaudo fuera del acceso de terceras personas y es por ello que cada día se está utilizando más la encriptación informática de toda la información de las empresas. 

MECANISMOS DE ENCRIPTACION Gronsfeld: Este método utiliza más de un alfabeto cifrado para poner en clave el mensaje y que se cambia de uno a otro según se pasa de una letra del texto en claro a otra.
Es decir que deben tenerse un conjunto de alfabetos cifrados y una forma de hacer corresponder cada letra del texto original con uno de ellos.

Método de transposición: En nuestro repaso por los métodos clásicos de criptografía, nos centramos en el método de transposición, origen y fundamento de otros sistemas de cifrado más complicados.
El método de transposición consiste en reordenar los elementos que forman el texto original, de modo que el criptograma resultante tiene los mismos elementos, pero su nueva colocación impide que se pueda entender.

Método César: Ahora vamos a conocer uno de los sistemas más clásicos de la Historia de esta disciplina: el método César, cuyo origen se sitúa en el siglo I antes de Cristo.
Este sistema se basa en el método de sustitución mono alfabética, es decir, el proceso de sustitución se lleva a cabo en cada uno de los elementos del texto claro.
En el método César, a cada letra le corresponde la que está 3 posiciones por delante en un proceso circular que recorre todo el alfabeto.

RSA: En los sistemas tradicionales de cifrado debe comunicarse una clave entre el emisor y el receptor del mensaje, el problema aquí es encontrar un canal seguro para transmitir dicha clave. Este problema viene a resolverse en los sistemas de clave pública la clave de cifrado, pues un tiempo enormemente de ordenador es necesario para encontrar una transformación de descifrado a partir de la de cifrado.
 
DES: DES fue desarrollado por IBM a mediados de los setenta. Aunque tiene un buen diseño, su tamaño de clave de 56 bits es demasiado pequeño para los patrones de hoy.
DES (Data Encriptaron Standard) es un mecanismo de encriptación de datos de uso generalizado. Hay muchas implementaciones de hardware y software de DES. Este transforma la información de texto llano en datos encriptados llamados texto cifrado mediante el uso de un algoritmo especial y valor semilla llamado clave. Si el receptor conoce la clave, podrá utilizarla para convertir el texto cifrado en los datos originales. Es un mecanismo de encriptado simétrico.

Chaffing & Winnowing: Esta técnica propuesta por Donald Rivest. Es más un intento de esquivar las restricciones a la criptografía en EE.UU. (y otros países) que una propuesta razonable debido al tamaño de los mensajes resultantes.
El término inglés “winnowing” se tomará como aventar es decir separar el grano de la paja y el término “chaffing” por el castellano empajar (cubrir o rellenar con paja). La idea básica consiste en mezclar la información real (grano) con otra de relleno (paja) de modo que sea imposible separarlas excepto para el destinatario.

SKIPJACK
: Este algoritmo fue descalificado por el gobierno de Estados Unidos. Algunos detalles sobre el algoritmo en sí y sus aplicaciones en la práctica a los chips Clipper y Capstone.
Skipjack fue desarrollado por la NSA inicialmente para los chips Clipper y Capstone. Su diseño comenzó en 1985 y se completó su evaluación en 1990.

BÍFIDO:
El método Bífido es un cifrado fraccionario. Es decir que cada letra viene representada por una o más letras o símbolos, y donde se trabaja con estos símbolos más que con las letras mismas.

WLBYKYAAOTB: Este método altera la frecuencia de los caracteres a diferencia de lo que ocurre por ejemplo con los cifrados mono alfabéticos. Admite algunas variaciones como por ejemplo dividir la lista en 3,4,…, n partes.

Blowfish: Este algoritmo realiza un cifrado simple en 16 ciclos, con un tamaño de bloque de 64 bytes para un total de 448 bits. Aunque hay una fase compleja de la inicialización. El cifrado de datos es muy eficiente en los microprocesadores grandes.

Método Vigenére:
Hasta el momento, en nuestros anteriores ejemplos en los que hemos visto métodos clásicos de cifrado, hemos repasado algoritmos cuyo criptograma no dependía de una clave externa, o que ésta era fija. En el sistema que sigue, el cifrado de Vigenère, observaremos cómo el cifrado va tomando diferentes valores en función de la clave que elijamos.
Tanto en los métodos de sustitución, como en los de transposición, las modificaciones a los que sometíamos el texto claro eran fijas, bien teniendo en cuenta la correspondencia con un segundo alfabeto en el caso de la sustitución, o en barajar las letras en función de un algoritmo preestablecido en las transposiciones.
El cifrado de Vigenère utiliza una clave externa para realizar las sustituciones, con lo que este mismo algoritmo puede dar diferentes criptogramas para el mismo texto claro en función de la clave que utilicemos.

Funciones Hash.
Los hash o funciones de resumen son algoritmos que consiguen crear a partir de una entrada (ya sea un texto, una contraseña o un archivo, por ejemplo) una salida alfanumérica de longitud normalmente fija que representa un resumen de toda la información que se le ha dado (es decir, a partir de los datos de la entrada crea una cadena que solo puede volverse a crear con esos mismos datos).
Estas funciones no tienen el mismo propósito que la criptografía simétrica y asimétrica, tiene varios cometidos, entre ellos está asegurar que no se ha modificado un archivo en una transmisión, hacer ilegible una contraseña o firmar digitalmente un documento.


Características del hash.


En definitiva, las funciones hash se encargan de representar de forma compacta un archivo conjunto de datos que normalmente es de mayor tamaño que el hash independientemente del propósito de su uso.
Este sistema de criptografía usa algoritmos que aseguran que con la respuesta (o hash) nunca se podrá saber cuáles han sido los datos insertados, lo que indica que es una función unidireccional. Sabiendo que se puede generar cualquier resumen a partir de cualquier dato nos podemos preguntar si se podrían repetir estos resúmenes (hash) y la respuesta es que teóricamente si, podría haber colisiones, ya que no es fácil tener una función hash perfecta (que consiga que no se repita la respuesta), pero esto no supone un problema, ya que si se consiguieran (con un buen algoritmo) dos hash iguales los contenidos serían totalmente distintos.
 
 

Caracteristicas Avanzadas de PHP



Manejo de Cookies.

¿Qué es una Cookie?
En informática el término Cookie se refiere que se utiliza para describir un tipo de mensajes que el navegador web y el servidor web intercambian, el propósito principal es identificar o recordar información previa que los usuarios con anticipación han guardado.

Estructura: Las cookies poseen las siguientes características que en teoría deberíamos configurar la momento de crear una cookie.
1. Nombre de la cookie. 2. Valor o conjunto de valores que deseamos recordar bajo un mismo nombre de cookie. 3. Tiempo en el que expira la sesión un valor negativo destruirá la cookie. 4. Ruta en la cual la cookie debe ser recordada. 5. Dominio en el cual la cookie debe ser recordada. 6. Definir si la cookie solo estará disponible para sesiones HTTPS. 7. Definir si la cookie puede o no ser accedida a través de JavaScript, es decir ejecutando un fichero del lado cliente.

Finalidad de las Cookies: Fueron diseñadas como un mecanismo seguro que permitiera recordar información considerada relevante en temas de SEO y Marketing digital, así como la personalización de los sitios web dependiendo de los hábitos de un usuario, recordar los click que previamente ha realizado y poder a través de ello verificar cual es el foco de atención del usuario en actividad.

Manejo de Sesiones de Usuario.

Sesiones en PHP:
Uno de los aspectos importantes a la hora de desarrollar nuestras aplicaciones es contar con un mecanismo que permita iniciar una sesión, es decir permitir el acceso autorizado al sistema a cierto grupo de usuarios, generalmente esto lo podemos conseguir utilizando un formulario de inicio de sesión, pero una vez ingresados los datos, el usuario podrá navegar sin ninguna limitante en la aplicación.

PHP clasifica estas variables de manera especial, ya que son de tipo globales, esto permite que desde cualquier componente de la aplicación se puedan leer las variables de sesión almacenadas en el servidor.

¿Como se controlan las sesiones?
Cuando un cliente inicia sesión en PHP automáticamente se envía al cliente un PHPSESID
que cada vez que se hace una solicitud de un recurso nuevo, se asocia a todas las variables registradas en la PHPSESID correspondiente.

De esta forma si la sesión la configuramos para que expire en un día, yo podré utilizar ese PHPSESID sin estar haciendo login cada vez que quiera acceder, además se podrán escribir variables globales para que sea recuperadas en pasos posteriores, como por ejemplo, los artículos que un usuario agrega al carrito de compra, las visitas que un sitio web ha tenido durante el día, gestionar control de acceso al sistema de manera restringido, controlar diversos niveles de acceso al sistema, usuario, administrador, vendedor, gerente, etc…

Computo 3. Programacion de Evaluaciones


Programación de Evaluaciones





jueves, 4 de mayo de 2017

PHP y los diferentes DBMS.

Los Gestores de Data, Generalmente son aplicaciones externas que se instalan como programas independientes, y los lenguajes de programación proporcionan las API's o Librerías para su manipulación y trabajo conjunto.
 
Entre ellas tenemos:
SQLite. 
PostgreSQL. 
Sybase.
MySQL.
Oracle.
MongoDB.
Mssql.

Además ofrece un conjunto de Capas Abstractas para el acceso a la Data con todos los beneficios de la POO.

Entre las que podemos mencionar:
PDO.
ODBC.
DBA.
dbx.
 DBMS & SQL.


Antes de iniciar de manera directa con los Gestores de Bases de Datos aclararemos primeramente el término persistencia de Datos.


Persistencia de Datos En informática se denomina datos persistentes a aquel tipo de información que se mantiene sin variaciones aunque el programa se cierre, la computadora se apague. Generalmente el término persistencia de datos es asociado de manera directa a los Gestores de Bases de Datos aunque existen otras formas de lograr que la información pueda ser guardada de forma permanente como por ejemplo:

Archivos de texto. 
Archivos en formato XML. 
Hojas de Excel.
Archivos en formato JSON. 
Otros. 

Qué son los Gestores de Bases de Datos:


 Son aplicaciones que permiten la administración de múltiples Bases de Datos, la definición de esquemas para soportar datos que se desean guardar, mecanismos para asegurar la integridad de los datos, la inconsistencia, la correcta obtención de los datos, la persistencia, el manejo de transacciones y además gestionar un Sistema de Control de acceso eficiente para los Datos. 

 El Lenguaje SQL:
SQL “Structured Query Language” es un lenguaje estándar para el acceso a Bases de Datos relacionales, de alto nivel, declarativo, no orientado a procedimientos, reconocido por todos los gestores de Bases de Datos y con variantes de SQL implementadas por cada uno de las aplicaciones propietarias. 
 
Transaction Control Language
TCL es un conjunto de comando que permiten el manejo de datos ATÓMICOS o transaccionales, aseguran que transacciones no completadas o corruptas no se ejecuten en la Base de Datos. El Servidor de la Data tiene la oportunidad de hacer un rollback, para deshacer los cambios y un commit para completar el proceso de escritura de datos una vez no ha existido ningún problema. Entre los comandos tenemos: ROLLBACK, COMMIT, AUTOCOMMIT.
 

 

Clases y Objetos



Introducción.
La programación orientada a objetos es una metodología de programación avanzada y bastante extendida, en la que los sistemas se modelan creando clases, que son un conjunto de datos y funcionalidades. Las clases son definiciones, a partir de las que se crean objetos. Los objetos son ejemplares de una clase determinada y como tal, disponen de los datos y funcionalidades definidos en la clase. La programación orientada a objetos permite concebir los programas de una manera bastante intuitiva y cercana a la realidad. La tendencia es que un mayor número de lenguajes de programación adopten la programación orientada a objetos como paradigma para novelizar los sistemas. Prueba de ello es la nueva versión de PHP (5), que implanta la programación de objetos como metodología de desarrollo. También Microsoft ha dado un vuelco hacia la programación orientada a objetos, ya que .NET dispone de varios lenguajes para programar y todos orientados a objetos.

Clase. 
Una clase es un conjunto de variables, llamados atributos, y funciones, llamadas métodos, que trabajan sobre esas variables. Las clases son, al fin y al cabo, una definición: una especificación de propiedades y funcionalidades de elementos que van a participar en nuestros programas. Por ejemplo, la clase "Caja" tendría como atributos características como las dimensiones, color, contenido y cosas semejantes. Las funciones o métodos que podríamos incorporar a la clase "caja" son las funcionalidades que deseamos que realice la caja, como introduce(), muestra_contenido(), comprueba_si_cabe(), vaciate()...
 
Herencia.
Algunos lenguajes OO soportan herencia múltiple, esto significa que una subclase puede heredar de varias clases padres. PHP no permite esto y una subclase solo puede heredar de una clase padre, sin embargo en PHP no hay ningún tipo de restricción en cuanto a el número de subclases que pueden heredar de una misma clase padre o superclase. 
La programación orientada a objetos tiene un mecanismo llamado herencia por el que se pueden definir clases a partir de otras clases. Las clases realizadas a partir de otra clase o mejor dicho, que extienden a otra clase, se llaman clases extendidas o clases derivadas. 
Las clases extendidas heredan todos los atributos y métodos de la clase base. Además, pueden tener tantos atributos y métodos nuevos como se desee.

Herencia.
Algunos lenguajes OO soportan herencia múltiple, esto significa que una subclase puede heredar de varias clases padres. PHP no permite esto y una subclase solo puede heredar de una clase padre, sin embargo en PHP no hay ningún tipo de restricción en cuanto a el número de subclases que pueden heredar de una misma clase padre o superclase. 
La programación orientada a objetos tiene un mecanismo llamado herencia por el que se pueden definir clases a partir de otras clases. Las clases realizadas a partir de otra clase o mejor dicho, que extienden a otra clase, se llaman clases extendidas o clases derivadas. 
Las clases extendidas heredan todos los atributos y métodos de la clase base. Además, pueden tener tantos atributos y métodos nuevos como se desee.

Encapsulamiento.
El encapsulamiento consiste en unir en la Clase las características y comportamientos, esto es, las variables y métodos. Es tener todo esto es una sola entidad. En los lenguajes estructurados esto era imposible. La utilidad del encapsulamiento va por la facilidad para manejar la complejidad, ya que tendremos a las Clases como cajas negras donde sólo se conoce el comportamiento pero no los detalles internos, y esto es conveniente porque nos interesará será conocer qué hace la Clase pero no será necesario saber cómo lo hace.

Interfaces
Las interfaces son similares en algunos aspectos a las clases abstractas. Permiten definir protocolos de comportamiento para los objetos en cualquier punto de la jerarquía de clases. Una interfaz permite definir un nombre a un conjunto de definiciones de métodos y a un conjunto de constantes. Una clase que cumple con una determinada interfaz debe implementar todos los métodos incluidos en la misma,
adquiriendo por tanto, un cierto comportamiento. La clase podría también, declarar alguno de los métodos definidos por la interfaz, como abstracto, forzando a que dicho método sea implementado por alguna de sus clases hijas. Además, una clase puede implementar más de una interfaz.
Una diferencia entre las clases abstractas y las interfaces es que mientras las primeras proporcionan un medio para expresar conceptos abstractos en programación, las segundas, se han diseñado para asegurar la funcionalidad dentro de una clase.

 

Funciones en PHP

Función.
Una función es un bloque de código independiente y autónomo que contiene un grupo de instrucciones que se identifican con un nombre. Las funciones pueden invocarse todas las veces que se requiera desde cualquier punto de un script. El código de las funciones puede aparecer dentro del script que se esté realizando o puede ser parte de un script independiente que será llamado como archivo de inclusión (otro script PHP invocado). 

Generalmente, cuando se realizan scripts con PHP las instrucciones se ejecutan conforme van siendo procesadas por el intérprete del lenguaje. Sin embargo, a la hora de realizar scripts más complejos, hay ocasiones en las que el mismo código ha de ser ejecutado más de una vez. Para estos casos sería útil que el lenguaje de programación permitiera dividir el código en segmentos más pequeños, de forma que cada bloque de código PHP pudiera ser agrupado bajo un identificador para que pudiera ser accedido de forma independiente. 

Sintaxis de las funciones en PHP 
En su forma más compleja una función se declara con la palabra reservada function. A continuación, se debe declarar el nombre de la función y posteriormente, y entre paréntesis, cada uno de los argumentos que recibirá separados por coma. En el caso más simple, sólo se colocan los paréntesis vacíos inmediatamente después del nombre de la función. Después de cerrar los paréntesis debe abrir llaves y colocar las instrucciones que realizará la función para luego cerrar la llave. La sintaxis se muestra a continuación:
function nombre_funcion([$param1, $param2, … , $paramn]){  //bloque de instrucciones PHP  }
Como se puede ver, son necesarios los siguientes componentes en la declaración de una función:  
La palabra reservada function que debe utilizarse para indicar al intérprete de PHP que se va a crear una nueva función.
nombre_funcion indica el nombre con el que se va a identificar la función dentro del script PHP para su posterior llamada. 
$param1, $param2, ... , $paramn representan los parámetros necesarios para que la función pueda ser ejecutada.
Los parámetros han de expresarse siempre entre paréntesis y separados por comas. Incluso si la función no necesitara ningún parámetro, deberán utilizarse los paréntesis. 
Bloque de instrucciones PHP, representa el conjunto de sentencias o instrucciones que se van a ejecutar cada vez que se haga una llamada a la función.  

 Ventajas del uso de funciones 

a) Simplificación de código: Las funciones hacen que el código de un script sea más fácil de leer, por tanto, lo hacen más entendible y más agradable a la vista del que tenga que leer el código. Esto es, porque evita el tener que repetir varias veces un segmento de código dentro de un mismo script. En lugar de ello se escribe una sola vez y luego dentro del script solamente hacemos la llamada a la función, en lugar de volverlo a escribir. 

b) Reutilización de código: Permite que otros scripts, a parte del script donde se digitó el
código de la función, puedan hacer uso de dicha función. Esto evita la carga del programador de tener que escribir la misma funcionalidad en diferentes scripts. 

c) Modularidad:El uso de funciones permite que las modificaciones al código sean menos trabajosas para el programador, porque en lugar de tener que cambiar el mismo código en varios lugares de un script, solamente se modifica el código de la función y los scripts que la llaman no sufren modificación alguna (al menos, en la mayor parte de los casos).

 

Manejo de Formularios

Manejo de Formularios.
 
Los Formularios no forman parte de PHP, sino del lenguaje estándar de Internet, HTML. Vamos a dedicar en este capítulo algunas líneas al HTML, para entrar posteriormente a tratarlos con PHP.

Atributos de la etiqueta Form.
Atributo action 
Este atributo permite especificar donde han de ser enviado los datos del formulario, cuando este es enviado. Normalmente suele ser un documento web, escrito en un lenguaje de programación de servidor, el cual se encarga de procesar los datos. También puede ser que los datos sean enviados a una dirección de correo electrónico. 
El siguiente ejemplo muestra el uso del atributo en un documento web, enviando los datos a un archivo php que encargaría de procesar la información del formulario.
 
 Atributo method
  Este atributo especifica el método HTTP que se usará para enviar el conjunto de datos del formulario. Los valores posibles pueden ser GET (valor por defecto) o POST. Ambos no distinguen entre mayúsculas y minúsculas. 

Atributo autocomplete  Este atributo especifica que el formulario pueda utilizar las entradas de datos anteriores que pueda haber realizado el usuario, para autocompletar los campos que son solicitados por el formulario. 

Atributo name
El atributo name permite especificar el nombre que se quiere asignar al formulario o los datos que se solicitan en el mismo. El nombre puede ser utilizado posteriormente bien por lenguajes interpretados en el cliente, para interactuar con el formulario, o bien con lenguajes interpretados en el servidor para procesar los datos recibidos.


 Atributo novalidate 
Este atributo permite especificar que los datos del formulario no sean validados, según las características de los campos utilizados en el formulario, de esta forma el formulario envía los datos sin realizar ningún tipo de comprobación sobre los datos. Es un atributo booleano, por lo tanto su aparición en la etiqueta de formulario, hace que se active el mismo.

Mecanismos de Encriptacion y Funciones Hash

¿QUE ES ENCRIPTACION? Encriptar es una manera de codificar la información para protegerla frente a terceros. Por lo tanto, la encriptación...