Cifrado César en C

Algoritmo de cifrado César en C

Anteriormente vimos cómo implementar el algoritmo de cifrado de César en Python, ahora veremos cómo cifrar y descifrar una oración usando el cifrado César igualmente, pero en el lenguaje de programación C.

Implementar el algoritmo en C es un poco más complicado que en otros lenguajes, sobre todo por la manipulación de cadenas, pero eso no es un impedimento.

Cifrado César en C

Cifrado César en C

Veamos entonces cómo codificar el algoritmo de cifrado César en C.

(más…)

Equivalentes a ord y chr en C

Hoy estaba trabajando con C y al buscar las funciones ord y chr (como las que existen en Python) me di cuenta de que no existen.

Todo esto es debido a que ord y chr podrían ser fácilmente remplazadas por operaciones del lenguaje, pues al final, una variable de tipo char es un entero. Lo que explico es lo que vimos cuando convertimos un entero a carácter, o un carácter a entero.

Veamos cómo podemos tener un equivalente a chr y ord en C.

(más…)

Explicación del cifrado César

Este cifrado utiliza un cifrado por sustitución, en donde cada letra es remplazada por otra que se encuentre a N posiciones de distancia. Por poner un ejemplo, si se rota 1 vez, los resultados son:

Cadena original: parzibyte

Cadena rotada: qbsajczuf

La sustitución se hace hacia la derecha. La p se convierte en q, la a en b y así sucesivamente. Para decodificar se rota hacia la izquierda con el mismo número de rotaciones; la q se convierte en p, la b en a y así hasta terminar.

Puedes leer más en la wikipedia, pero en resumen, Julio César lo usaba rotando 3 veces las letras. Se supone que en aquellos tiempos poca gente sabía leer, y la que sabía leer no se imaginaba cómo hacer el criptoanálisis.

(más…)

Hashear contraseñas en Python usando bcrypt

Hashear contraseñas con Python y bcrypt

Anteriormente vimos cómo generar una contraseña segura en Python cuando necesitamos un token o una clave segura, ahora veremos cómo hashear una contraseña en Python, usando bcrypt.

El algoritmo de bcrypt es usado también por PHP al hashear contraseñas. Igualmente está disponible en Go.

Hashear contraseñas en Python usando bcrypt

Hashear contraseñas en Python usando bcrypt

Hashear contraseñas es un estándar que debemos seguir al implementar autenticación de usuarios, por ejemplo. Pero bueno, vamos al tutorial en donde veremos:

  1. Cómo instalar la librería de bcrypt usando pip
  2. Cómo hashear una contraseña con bcrypt y Python
  3. Cómo comprobar si una contraseña coincide con el hash de bcrypt en Python
  4. Costos y límites de bcrypt en Python

(más…)

Narcisista en C

Número narcisista en C

Después de algún tiempo de haber publicado el algoritmo para saber si un número es narcisista en varios lenguajes de programación es hora de implementarlo en el lenguaje C.

No podemos usar el código de C++ porque C++ no es compatible con C; aunque al revés sí se puede. Es decir, podemos usar código de C en CPP pero no podemos usar código de CPP en C.

Narcisista en C

Narcisista en C

En fin, veremos cómo implementar el algoritmo para determinar si un número es narcisista en C.

(más…)

Par o impar en C con operación AND a nivel de bits

Número par o impar sin usar divisiones ni operador módulo en C

Hoy veremos un algoritmo simple pero un poco interesante; se trata de determinar si un número es par o impar pero con algunas restricciones:

  • No se pueden usar divisiones
  • No se debe usar el operador módulo %

Es decir, no es como estábamos acostumbrados a hacerlo con:

if(numero % 2 == 0) printf("Es par");

Lo haremos en el lenguaje de programación C, pero puedes aplicarlo para otros lenguajes.

Par o impar en C con operación AND a nivel de bits

Par o impar en C con operación AND a nivel de bits

(más…)

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á.

(más…)

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.

(más…)

Invertir cadena o palabra en JavaScript

Ya vimos cómo invertir una cadena o palabra en C y en Arduino. Ahora vamos a ver cómo rotar una cadena en JavaScript utilizando dos maneras o funciones.

Las cadenas en JavaScript son inmutables y no son parecidas a las de C. Es decir, en C son arreglos de caracteres pero en JavaScript no. Por lo tanto, para invertir una cadena en JavaScript tenemos que crear una nueva cadena.

Ya sea que llamemos a una función que regrese una nueva cadena o que creemos una, al final sí podremos lograr nuestro objetivo, y podrá invertir cadenas, palabras, oraciones completas y texto.

(más…)

Invertir cadena en C

Voltear cadena en C

Girar, rotar, voltear o invertir una cadena en C es una cosa fácil de hacer, aunque no tan fácil como en otros lenguajes de programación.

El algoritmo es sencillo, recordemos que las cadenas en C son simples arreglos de caracteres. Así que tenemos que ir desde el inicio hasta la mitad de la cadena, rotando carácter por carácter.

(más…)

Contar frecuencia de palabras que el usuario introduce

Contar frecuencia de palabras en C

Realizar conteo de ocurrencias de palabras en una oración con C

Ya estamos aquí con otro tutorial de C. Lo que haremos ahora será analizar una cadena o string, contar las palabras que tiene (ignorando puntos, espacios y signos) y luego agruparlas para indicar la frecuencia con la que se repiten.

Este ejercicio puede resolverse de varias maneras pero yo he decidido hacerlo a través de una pila en donde almacenaremos structs. Aquí puedes ver un ejemplo de una pila de enteros, la modificaremos un poco para que funcione con structs.

¿Por qué una pila en lugar de un arreglo? muy fácil, porque la pila puede tener un tamaño infinito.

Al final generaremos una tabla como la que se ve en la imagen (aunque la frecuencia es 1 en la mayoría de veces, la función trabaja bien; el problema fue que la cadena de prueba no tenía muchas palabras repetidas):

Contar frecuencia de palabras de una oración con C

Contar frecuencia de palabras de una oración con C

 

(más…)