Biblioteca enigma para aps de Algebra Linear
Project description
Enigma
A biblioteca tem como objetivo cifrar e dicifrar mensagens, através de one-hot e matrizes de permutação. Fazendo uma especie de enigma, convertendo strings para uma matriz codificada em one-hot.
Funções
para_one_hot(msg: str)
: codifica uma mensagem de texto em uma matriz one-hot.para_string(M: np.array)
: decodifica uma matriz one-hot de volta para uma mensagem de texto.cifrar(msg: str, P: np.array)
: cifra uma mensagem usando uma matriz de permutaçãoP
.de_cifrar(msg: str, P: np.array)
: decifra uma mensagem usando uma matriz de permutaçãoP
.enigma(msg: str, P: np.array, E: np.array)
: cifra uma mensagem usando duas matrizes de permutaçãoP
eE
.de_enigma(msg: str, P: np.array, E: np.array)
: decifra uma mensagem criptografada usando as matrizes de permutaçãoP
eE
.
Processos
- Cifrar: Para a cifragem, nós extraímos uma matriz one_hot da mensagem passada, e a multiplicamos pela matriz de permutação também passada. Com esse processo, altermamos a posição do numero 1 nas colulas e assim, alteramos as letras que estão representadas pela matriz one_hot e ciframos a mensagem. Segue um exemplo minimizado do processo:
$$ \begin{bmatrix} 0 & 0 & 1 \ 1 & 0 & 0 \ 0 & 1 & 0 \end{bmatrix} \begin{bmatrix} 1 & 1 & 0 & 0 & 0 & 0 \ 0 & 0 & 1 & 1 & 0 & 0 \ 0 & 0 & 0 & 0 & 1 & 1 \end{bmatrix}
\begin{bmatrix} 0 & 0 & 0 & 0 & 1 & 1 \ 1 & 1 & 0 & 0 & 0 & 0 \ 0 & 0 & 1 & 1 & 0 & 0 \end{bmatrix} $$
-
Decifrar: Para decifrar a mensagem, precimos da matriz permutação que foi usada no processo de cifragem. Tendo essa matriz, nós tiramos a matriz one_hot da mensagem cifrada, e utilizamos a função
np.linalg.solve()
, para achar a matriz da mensagem original, e assim reverte-la de volta para string. A funçãonp.linalg.solve()
pega a matriz da mensagem cifrada e multiplica pelo inverso da matriz usada de permutação, achando assim a matriz original do texto. -
Enigmar: Para o processo de enigmar, fazemos quase a mesma coisa que o cifrar. A diferença é que ao invez de multiplicar a matriz da mensagem inteira, multiplicamos letra por letra da mensagem, e a cada letra, multiplicamos a matriz permutação
P
pela matriz permutaçãoE
. Assim, a matriz do primeiro caracter da mensagem será multiplicado porP
, o segundo multiplicado porP@E
e assim segue. Com esse processo, letras iguais não são cifradas para a mesma letra do novo alfabeto, dificultado a resolução do enigma. -
Resolver enigma: No processo de resolver o enigma, fazemos quase a mesma coisa que no processo de decifrar, porém, como cada letra foi alterada por uma matriz permutação diferente, resolvemos letra por letra com a função
np.linalg.solve()
, passando a matriz permutação utilizada para cada letra.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file biblioteca_enigma-0.0.1.tar.gz
.
File metadata
- Download URL: biblioteca_enigma-0.0.1.tar.gz
- Upload date:
- Size: 4.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.11.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 037cb83999f2c3b70b9933130bb7dcfe0240dc05ca3bf5a060903fd478185341 |
|
MD5 | 042e8edc56da5f22d4590dbd424dd607 |
|
BLAKE2b-256 | ed42069b6c73027110f65f8b6079d65f314544d8317e66ee20c034f8b4e08c91 |