Skip to content

Latest commit

 

History

History
329 lines (260 loc) · 11.1 KB

2020-12-09.md

File metadata and controls

329 lines (260 loc) · 11.1 KB

Proyectos antes de Navidad

  • Convertir lista de deseos a carrito enviado por Whatsapp
  • Mostrar en un dibujo bar y número de personas en el bar
  • Almacenar información GPS junto con preferencias
  • Calcular la distancia entre personas GPS con sus preferencias asociadas a una tabla auxiliar
  • Generar QR con la comanda de un bar y procesar el pago


Programación de documentos web utilizando lenguajes de «script» de servidor

  • Clasificación.
  • Integración con los lenguajes de marcas.
  • Sintaxis.
  • Herramientas de edición de código.
  • Elementos del lenguaje estructurado: tipos de datos, variables, operadores, estructuras de control, subprogramas…
  • Elementos de orientación a objeto.
  • Comentarios.
  • Funciones integradas y de usuario.
  • Gestión de errores.
  • Mecanismos de introducción de información: formularios. Procesamiento de datos recibidos desde el cliente.
  • Métodos de envío de datos desde el cliente al servidor.
  • Autenticación de usuarios.
  • Control de accesos.
  • Sesiones. Mecanismos para mantener el estado entre conexiones.
  • Configuración del intérprete.

Poner en funcionamiento TensorFlow con Docker

EJECUTAR UN EJEMPLO DE RECONOCIMIENTO DE IMÁGENES CON TENSORFLOW REALIZANDO UNA CONEXIÓN SSH A UN CONTENEDOR DOCKER DESDE POWERSHELL EN WINDOWS



Programación de documentos web utilizando lenguajes de «script» de servidor

  • Clasificación.
  • Integración con los lenguajes de marcas.
  • Sintaxis.
  • Herramientas de edición de código.
  • Elementos del lenguaje estructurado: tipos de datos, variables, operadores, estructuras de control, subprogramas…
  • Elementos de orientación a objeto.
  • Comentarios.
  • Funciones integradas y de usuario.
  • Gestión de errores.
  • Mecanismos de introducción de información: formularios. Procesamiento de datos recibidos desde el cliente.
  • Métodos de envío de datos desde el cliente al servidor.
  • Autenticación de usuarios.
  • Control de accesos.
  • Sesiones. Mecanismos para mantener el estado entre conexiones.
  • Configuración del intérprete.

PHP

Funciones

Ejemplos de funciones

Función de suma

function sumar($a,$b)
{
	$valor1 = (int) $a;
	$valor2 = (int) $b;
	$suma = $valor1 + $valor2;
     return $suma; 
}
$valor = 2;
$resultado = 1 - sumar(5,3*$valor); 

Función que suma cualquier número de enteros

function sumar() 
{
	$suma = 0;

	for($i=0;$i< func_num_args();$i++)
	{
		$suma += (int) func_get_arg($i);
	}

	return $suma;
}
$valor = sumar(1,2,3,4,5,6);

Función que devuelve un valor

function menorMayor($a, $b)
{
	$a = (int) $a;
	$b = (int) $b;

	if($a == $b) $comp = 0;
     else if ($a < $b) $comp = -1;
     else $comp = 1;

	return $comp;
}

Cifrado y hash

CCN-STIC-807 – Criptografía de empleo en el ENS

Tipo de Algoritmo Acreditados por el CCN
Cifrado Simétrico TDEA (Triple Data Encryption Algorithm)
AES (Advanced Encryption Standard)
Algoritmos Asimétricos DSA (Digital Signature Algorithm)
ECDSA (Elliptic Curve Digital Signature Algorithm)
RSA (Criptosistema RSA)
ECIES (Elliptic Curve Integrated Encryption Scheme)
Intercambio de Clave DH o DHKA (Diffie-Hellman Key Agreement)
MQV (Menezes-Qu-Vanstone Key Agreement)
ECDH (Elliptic Curve Diffie-Hellman)
ECMQV (Elliptic Curve Menezes-Qu-Vanstone)
Funciones resumen (Hash) SHA-2 (Secure Hash Algorithm)
HMAC (Hash Message Authentication Code )

HMAC

En la criptografía, un código de autentificación de mensajes en clave-hash (HMAC) es una construcción específica para calcular un código de autentificación de mensaje (MAC) que implica una función hash criptográfica en combinación con una llave criptográfica secreta. Como cualquier MAC, puede ser utilizado para verificar simultáneamente la integridad de los datos y la autentificación de un mensaje. Cualquier función hash criptográfica, tales como MD5 o SHA-1, puede ser utilizada para el cálculo de un HMAC; el algoritmo MAC resultante se denomina HMAC-MD5 o HMAC-SHA1 en consecuencia. La fuerza criptográfica del HMAC depende de la potencia criptográfica de la función de hash subyacente, el tamaño de su salida de hash y el tamaño y calidad de la llave.

Generar HMAC-SHA256 con PowerShell

https://www.jesusninoc.com/2018/02/18/generar-hmac-sha256-con-powershell/

Cifrar y descifrar un mensaje con AES desde PHP

<?php
/**
 * simple method to encrypt or decrypt a plain text string
 * initialization vector(IV) has to be the same when encrypting and decrypting
 * 
 * @param string $action: can be 'encrypt' or 'decrypt'
 * @param string $string: string to encrypt or decrypt
 *
 * @return string
 */
function encrypt_decrypt($action, $string) {
    $output = false;

    $encrypt_method = "AES-256-CBC";
    $secret_key = 'This is my secret key';
    $secret_iv = 'This is my secret iv';

    // hash
    $key = hash('sha256', $secret_key);
    
    // iv - encrypt method AES-256-CBC expects 16 bytes - else you will get a warning
    $iv = substr(hash('sha256', $secret_iv), 0, 16);

    if ( $action == 'encrypt' ) {
        $output = openssl_encrypt($string, $encrypt_method, $key, 0, $iv);
        $output = base64_encode($output);
    } else if( $action == 'decrypt' ) {
        $output = openssl_decrypt(base64_decode($string), $encrypt_method, $key, 0, $iv);
    }

    return $output;
}

$plain_txt = "This is my plain text";
echo "Plain Text =" .$plain_txt. "\n";

$encrypted_txt = encrypt_decrypt('encrypt', $plain_txt);
echo "Encrypted Text = " .$encrypted_txt. "\n";

$decrypted_txt = encrypt_decrypt('decrypt', $encrypted_txt);
echo "Decrypted Text =" .$decrypted_txt. "\n";

if ( $plain_txt === $decrypted_txt ) echo "SUCCESS";
else echo "FAILED";

echo "\n";

?>

Cifrar una información con AES (la explicación utiliza una función que ha sido declarada OBSOLETA a partir de PHP 7.1.0. Su uso está totalmente desaconsejado)

/* Para encriptar la información $secreta se hace lo siguiente: */
$td = mcrypt_module_open('rijndael-256''''ofb''');
/* Obtener el vector de inicialización */
$is = mcrypt_enc_get_iv_size($td);
$iv = mcrypt_create_iv($is);

/* Obtener la clave */
$ks = mcrypt_enc_get_key_size($td);
$key = substr(md5('very secret key'), 0$ks);

/* Las funciones mcrypt_enc_get devuelven el tamaño en bytes del vector de inicialización (IV) y de la clave para un determinado descriptor de cifrado. */
/* Inicializar encriptación */
mcrypt_generic_init($td$key$iv);

/* Encriptar datos */
$encriptado = mcrypt_generic($td$secreta);

/* Terminar encriptacion */
mcrypt_generic_deinit($td);

mcrypt_module_close($td);

//Se almacenan &encriptado y $iv

Descifrar una información con AES (la explicación utiliza una función que ha sido declarada OBSOLETA a partir de PHP 7.1.0. Su uso está totalmente desaconsejado)

/* Para desencriptar una determinada encriptacion $encriptado con un vector de inicialización $iv y una determinada clave $key se hace lo siguiente: */
$td = mcrypt_module_open('rijndael-256''''ofb''');
ks = mcrypt_enc_get_key_size($td);
$key = substr(md5('very secret key'), 0$ks);
$iv = //Se obtiene el vector de inicializacion
$encriptado = //Se obtiene el valor a desencriptar

/* Inicializar desencriptación */
mcrypt_generic_init($td$key$iv);

/* Desencriptar datos */
$secreta = mdecrypt_generic($td$encriptado);

/* Terminar desencriptacion */
mcrypt_generic_deinit($td);

mcrypt_module_close($td);

Crear un sistema que permita cifrar desde PHP con AES y descrifrar con PowerShell

Ejemplo: convertir en Base64 una cadena en Base64 y desde PowerShell convertir de Base64 a cadena

<?php

$codi = base64_encode("hola");
$salida = shell_exec("powershell [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String('aG9sYQ=='))");
echo "<pre>$salida</pre>";

?>


Programación de documentos web utilizando lenguajes de «script» de servidor

  • Clasificación.
  • Integración con los lenguajes de marcas.
  • Sintaxis.
  • Herramientas de edición de código.
  • Elementos del lenguaje estructurado: tipos de datos, variables, operadores, estructuras de control, subprogramas…
  • Elementos de orientación a objeto.
  • Comentarios.
  • Funciones integradas y de usuario.
  • Gestión de errores.
  • Mecanismos de introducción de información: formularios. Procesamiento de datos recibidos desde el cliente.
  • Métodos de envío de datos desde el cliente al servidor.
  • Autenticación de usuarios.
  • Control de accesos.
  • Sesiones. Mecanismos para mantener el estado entre conexiones.
  • Configuración del intérprete.

Cifrado y descifrado con PHP

Ejemplo: cifrar desde PowerShell y descifrar desde PHP

Cifrar desde PowerShell

$unencryptedString = "This is my plain text"

# Cifrar
$bytes = [System.Text.Encoding]::UTF8.GetBytes($unencryptedString)

$aesManaged = New-Object "System.Security.Cryptography.AesManaged"
$aesManaged.Mode = [System.Security.Cryptography.CipherMode]::ECB
$aesManaged.BlockSize = 128
$aesManaged.Key = [System.Text.Encoding]::UTF8.GetBytes('This is my secre')

$encryptor = $aesManaged.CreateEncryptor()
$encryptedData = $encryptor.TransformFinalBlock($bytes, 0, $bytes.Length);

$encrypted = [System.Convert]::ToBase64String($encryptedData)

$web = iwr ("http://localhost:81/fich.php?cifrado="+$encrypted)
$web.content

Descifrar desde PHP

<?php

// Sustituir el " " por "+" porque se pierde en la url

$cifrado = str_replace(" ","+",$_GET['cifrado']);
echo $cifrado;

function encrypt_decrypt($action, $string) {
    $output = false;

    $encrypt_method = "AES-128-ECB";
    $key = 'This is my secre';

    if ( $action == 'encrypt' ) {
        $output = openssl_encrypt($string, $encrypt_method, $key);
        $output;
    } else if( $action == 'decrypt' ) {
        $output = openssl_decrypt($string, $encrypt_method, $key);
	$output;
    }

    return $output;
}

$decrypted_txt = encrypt_decrypt('decrypt', $cifrado);
echo "Decrypted Text =" .$decrypted_txt. "\n";

echo "\n";

?>