hexadecimal

Hexadecimal a decimal en C

Hexadecimal a decimal en C

Ya hemos visto algunas conversiones entre números de distintas bases usando C. Por ejemplo:

Vamos a seguir con estos tutoriales y ahora veremos cómo convertir un número hexadecimal a decimal en C; o sea, convertir de base 16 a base 10.

Hexadecimal a decimal en C

Hexadecimal a decimal en C

Lecturas recomendadas

Para no alargar mucho este tutorial he puesto algunas explicaciones en otros lugares. Te invito a leerlas:

Ahora sí vamos allá.

Continue reading…

Obtener valor entero a partir de dígito hexadecimal en C

Como sabemos, los números hexadecimales se representan con 16 dígitos; por eso son base 16. Para eso se usan los números del 0 al 9 y las letras de la A a la F.

Pero esas letras tienen un valor en decimal, la A tiene el valor de 10, la B de 11 y así hasta que la F tiene 15. Pues justamente hoy veremos cómo obtener ese valor decimal o entero a partir de un carácter hexadecimal.

La función debe quedar de tal forma que si le pasamos una ‘A’ devolverá un 10; o si le pasamos un ‘1’ devolverá 1.

Continue reading…

App que explica la conversión hexadecimal a decimal

Explicando la conversión hexadecimal a decimal manualmente usando JavaScript

App que explica cómo convertir hexadecimal a decimal en JavaScript con Vue.JS 2

Como lo dije en otro post, hice una pequeña app que te explica cómo convertir un número hexadecimal a decimal. No es como cuando vimos conversión entre bases con JS, pues eso se hacía pero el lenguaje se encargaba.

Lo que trato de hacer aquí es explicar el procedimiento para realizar la conversión. Esto es por si estamos en nuestras clases de matemáticas discretas o simplemente algún día necesitamos hacer la conversión hexadecimal-decimal a mano.

Nota: te invito a ver una app que convierte bases.

Continue reading…

Probar si es hexadecimal en JavaScript

Expresión regular para probar si un número es hexadecimal en JavaScript

Probar si una cadena es un número hexadecimal con JavaScript usando expresiones regulares

Actualmente estoy trabajando en una pequeñísima app que te dice cómo convertir manualmente un número hexadecimal a decimal.

Es decir, tú pones el número hexadecimal y la app lo convierte, pero te explica cómo hacerlo: pone todas las operaciones y cómo debes ir elevando el número, luego sumarlo y esas cosas que puede hacer un profesor (aunque la app no se cansa nunca).

Probar si es hexadecimal en JavaScript

Probar si es hexadecimal en JavaScript

Pero bueno, no vamos a desviarnos. Para que funcione más o menos bien se tiene que validar el número, y veremos cómo hacerlo con expresiones regulares.

Continue reading…

Convertidor binario octal decimal hexadecimal en JavaScript

Haciendo un conversor de bases numéricas con JavaScript y Vue JS 2

Introducción

Para reforzar y aplicar lo que vimos en cómo convertir entre binario, octal, decimal y hexadecimal en JavaScript decidí crear un convertidor (o conversor) de bases numéricas o números. Lo que hace es muy simple, convierte (desde cualquier base) a las siguientes:

  • Binario
  • Octal
  • Decimal
  • Hexadecimal

Para agregarle más comodidad al usuario pusimos la opción de copiar el texto directamente en el portapapeles.

Veamos una pequeña explicación.

Continue reading…

Conversiones de números en JavaScript: Binario, Octal, Hexadecimal y Decimal

Introducción

Hoy veremos cómo podemos convertir números a una base distinta en JavaScript. Es decir, cómo hacer la operación (y lo inverso) para convertir un número de determinada a base a otra.

Por ejemplo, convertir binario a octal, binario a decimal, decimal a hexadecimal y todas esas conversiones.

Para ello, no utilizaremos más que los métodos que le lenguaje provee; nada de librerías externas o algoritmos complicados.

Continue reading…

Generar un token en PHP criptográficamente seguro

Introducción

A veces necesitamos generar un token en PHP o una cadena aleatoria. Por ejemplo, es muy común que cuando queremos restablecer nuestra contraseña se nos mande un mensaje al correo electrónico que teníamos registrado.

El mensaje probablemente tendrá un link como:

sitio.com/restablecer-pass?token=123

En donde 123 es el token. Hoy veremos cómo generar un token de esos pero sin depender del tiempo, haciéndolo criptográficamente seguro.

Ya que, como sabemos, si generamos un token aleatorio la mayoría de veces se basa en el tiempo Unix, cosa que puede ser (con cierta dificultad pero no por ello imposible) adivinada.

En este caso vamos a generar un token criptográficamente seguro, que de igual manera podríamos usar como contraseña, clave de cifrado, entre otros. Desde los usos más simples hasta los más complejos, y todo ello con la seguridad que se merece.

Esto funciona tanto para PHP 5 como para la versión 7.

Generar un  token en PHP de forma que este sea seguro

Vamos a ver cómo generar un token en PHP, que no es más que un conjunto de caracteres que no deben ser adivinados de ninguna manera (excepto por fuerza bruta, pero eso es otra historia). Hay 2 versiones de este script, la primera para PHP 5  y la segunda para PHP 7.

Esto es porque PHP 7 incorpora nuevas funciones que no están presentes en las otras versiones, por lo que debemos buscar alternativas.

En PHP 5

Si usamos PHP en su versión 5 (aunque deberíamos actualizarnos) esto generará un token seguro:

Dividimos la longitud entre 2, ya que al representar cada byte en formato hexadecimal estos se convierten en 2 dígitos.

Por ejemplo, “Hello” en hexadecimal es 48656c6c6f.

Y para llamarla la llamamos con un argumento: la longitud. Es decir, cuántos caracteres queremos o la longitud esperada de la cadena.

Ejemplos:

Es importante notar que cuando pasamos 7 devuelve en realidad una cadena de longitud 6, así que mejor pasamos números pares y mayores a 4.

En PHP 7

Modificaríamos la función y llamaríamos a random_bytes en lugar de openssl_random_pseudo_bytes. Queda así:

Ejemplos

Podemos llamar a la función y devolverá una cadena aleatoria, así:

Justo como se ve en la siguiente imagen:

Demostración de cómo generar un token en PHP que sea seguro criptográficamente

Demostración de cómo generar un token en PHP que sea seguro criptográficamente

Generar color hexadecimal aleatorio con Javascript

Introducción

Recientemente estuve generando algunas gráficas de barras para un pequeño proyecto. Debido a que las gráficas eran llenadas de forma dinámica, necesitaba una forma de generar colores aleatorios en hexadecimal.

Recordemos que un color hexadecimal se compone de 6 caracteres que pueden ser: 0123456789ABCDEF

Por ejemplo, un color hexadecimal puede ser el #8bc34a. El color negro es #000000 y el blanco es #FFFFFF

Ahora veamos cómo generar este color en JavaScript. Por cierto, no todos serán colores agradables a la vista del usuario, pero recordemos que el objetivo es generar un color aleatorio, no un color agradable y aleatorio.

Generar color hexadecimal en JavaScript

Para ello alguien más ya escribió en esta página la función, y alguien la ha mejorado en Stackoverflow. La función queda así:

const generarColor = () => "#000000".replace(/0/g, () => (~~(Math.random() * 16)).toString(16))

Eso fue utilizando const y funciones flecha, algo de la versión ES6. Pero fácilmente se puede escribir para versiones anteriores:

var generarColor = function () {
    "#000000".replace(/0/g, function () {
      return (~~(Math.random() * 16)).toString(16);
    })
  }

Luego de eso podemos simplemente llamar a la función y listo. Aquí un ejemplo:

Generar clave hexadecimal segura con crypto y rand en Golang

Generar clave hexadecimal segura con crypto y rand en Golang

Introducción

Hoy veremos cómo generar una clave hexadecimal que no pueda ser predecible. Dicha clave podemos utilizarla más tarde como clave de cifrado, id de sesiones, tokens, etcétera.

Generar clave hexadecimal segura

Lo único que tenemos que hacer es leer de rand.Reader y pasar los resultados a un arreglo que guardará la clave. Luego, convertimos esa clave a string, lo que nos dará algo como:

7daaeec6c14a2a1de75d6927514c4f159cc80812a90587691b6312435f47f1b1

Obviamente generará una clave diferente cuando lo ejecutemos.

El código queda así:

package main

import (
	"crypto/rand"
	"encoding/hex"
	"fmt"
	"io"
	"log"
)

func main() {
	// La longitud será el doble de la capacidad del arreglo (64 en este caso)
	var clave [32]byte
	_, err := io.ReadFull(rand.Reader, clave[:])
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println("Clave => ", hex.EncodeToString(clave[:]))
}

Lo que imprime en pantalla:

Generar clave hexadecimal de 64 caracteres

Generar clave hexadecimal de 64 caracteres

En este caso es de 64 caracteres. Si queremos más, hay que cambiar la longitud del arreglo. Para generar una de 128 caracteres:

package main

import (
	"crypto/rand"
	"encoding/hex"
	"fmt"
	"io"
	"log"
)

func main() {
	// La longitud será el doble de la capacidad del arreglo (64 en este caso)
	var clave [64]byte
	_, err := io.ReadFull(rand.Reader, clave[:])
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println("Clave => ", hex.EncodeToString(clave[:]))
}

Lo que da la siguiente salida:

Generar clave hexadecimal de 128 caracteres

Generar clave hexadecimal de 128 caracteres