Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/lpedraoss/hill-cipher
https://github.com/lpedraoss/hill-cipher
Last synced: about 2 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/lpedraoss/hill-cipher
- Owner: lpedraoss
- Created: 2024-08-04T23:40:38.000Z (5 months ago)
- Default Branch: main
- Last Pushed: 2024-08-13T15:26:29.000Z (5 months ago)
- Last Synced: 2024-08-13T19:59:30.506Z (5 months ago)
- Language: Python
- Size: 21.9 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: readme.md
Awesome Lists containing this project
README
El cifrado Hill es un tipo de cifrado por bloques basado en álgebra lineal. Fue inventado por Lester S. Hill en 1929. Utiliza matrices y vectores para cifrar y descifrar mensajes. Aquí tienes una descripción general de cómo funciona:
### Cifrado Hill
1. **Clave**: Se elige una matriz cuadrada \( K \) de tamaño \( n \times n \) como clave. Esta matriz debe ser invertible en el módulo del tamaño del alfabeto (por ejemplo, 26 para el alfabeto inglés).
2. **Texto en claro**: El mensaje se divide en bloques de tamaño \( n \). Si el último bloque es más pequeño que \( n \), se puede rellenar con caracteres adicionales.
3. **Cifrado**:
- Cada bloque de texto en claro se convierte en un vector de números usando un diccionario de letras a índices.
- Se multiplica el vector por la matriz clave \( K \) y se toma el resultado módulo 26.
- El vector resultante se convierte de nuevo en letras usando el diccionario de índices a letras.4. **Descifrado**:
- Se calcula la inversa de la matriz clave \( K \) en módulo 26.
- Cada bloque cifrado se convierte en un vector de números.
- Se multiplica el vector por la matriz inversa y se toma el resultado módulo 26.
- El vector resultante se convierte de nuevo en letras.### Ejemplo de Cifrado Hill en Python
Voy a mostrarte un ejemplo simple de cifrado y descifrado Hill en Python:
#### Pseudocódigo:
1. Definir la matriz clave y su inversa.
2. Crear funciones para convertir texto a vectores y viceversa.
3. Implementar las funciones de cifrado y descifrado.