biblioteca-enigma


Namebiblioteca-enigma JSON
Version 0.0.1 PyPI version JSON
download
home_page
SummaryBiblioteca enigma para aps de Algebra Linear
upload_time2024-03-05 17:45:29
maintainer
docs_urlNone
authorLaura Pontiroli Machado
requires_python
licenseMIT License
keywords enigma
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # 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ção `P`.
- `de_cifrar(msg: str, P: np.array)`: decifra uma mensagem usando uma matriz de permutação `P`.
- `enigma(msg: str, P: np.array, E: np.array)`: cifra uma mensagem usando duas matrizes de permutação `P` e `E`.
- `de_enigma(msg: str, P: np.array, E: np.array)`: decifra uma mensagem criptografada usando as matrizes de permutação `P` e `E`.

## 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ção `np.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ção `E`. Assim, a matriz do primeiro caracter da mensagem será multiplicado por `P`, o segundo multiplicado por `P@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.


            

Raw data

            {
    "_id": null,
    "home_page": "",
    "name": "biblioteca-enigma",
    "maintainer": "",
    "docs_url": null,
    "requires_python": "",
    "maintainer_email": "",
    "keywords": "enigma",
    "author": "Laura Pontiroli Machado",
    "author_email": "laahpontiroli@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/ed/42/069b6c73027110f65f8b6079d65f314544d8317e66ee20c034f8b4e08c91/biblioteca_enigma-0.0.1.tar.gz",
    "platform": null,
    "description": "# Enigma\n\nA biblioteca tem como objetivo cifrar e dicifrar mensagens, atrav\u00e9s de one-hot e matrizes de permuta\u00e7\u00e3o. Fazendo uma especie de enigma, convertendo strings para uma matriz codificada em one-hot.\n\n## Fun\u00e7\u00f5es\n\n- `para_one_hot(msg: str)`: codifica uma mensagem de texto em uma matriz one-hot.\n- `para_string(M: np.array)`: decodifica uma matriz one-hot de volta para uma mensagem de texto.\n- `cifrar(msg: str, P: np.array)`: cifra uma mensagem usando uma matriz de permuta\u00e7\u00e3o `P`.\n- `de_cifrar(msg: str, P: np.array)`: decifra uma mensagem usando uma matriz de permuta\u00e7\u00e3o `P`.\n- `enigma(msg: str, P: np.array, E: np.array)`: cifra uma mensagem usando duas matrizes de permuta\u00e7\u00e3o `P` e `E`.\n- `de_enigma(msg: str, P: np.array, E: np.array)`: decifra uma mensagem criptografada usando as matrizes de permuta\u00e7\u00e3o `P` e `E`.\n\n## Processos \n- **Cifrar**: Para a cifragem, n\u00f3s extra\u00edmos uma matriz one_hot da mensagem passada, e a multiplicamos pela matriz de permuta\u00e7\u00e3o tamb\u00e9m passada. Com esse processo, altermamos a posi\u00e7\u00e3o do numero 1 nas colulas e assim, alteramos as letras que est\u00e3o representadas pela matriz one_hot e ciframos a mensagem. Segue um exemplo minimizado do processo: \n\n$$\n\\begin{bmatrix}\n0 & 0 & 1 \\\\\n1 & 0 & 0 \\\\\n0 & 1 & 0 \n\\end{bmatrix}\n\\begin{bmatrix}\n    1 &  1 & 0 & 0 & 0 & 0 \\\\\n    0 &  0 & 1 & 1 & 0 & 0 \\\\\n    0 &  0 & 0 & 0 & 1 & 1 \n\\end{bmatrix}\n= \n\\begin{bmatrix}\n    0 &  0 & 0 & 0 & 1 & 1 \\\\\n    1 &  1 & 0 & 0 & 0 & 0 \\\\\n    0 &  0 & 1 & 1 & 0 & 0 \n\\end{bmatrix}\n$$\n\n- **Decifrar**: Para decifrar a mensagem, precimos da matriz permuta\u00e7\u00e3o que foi usada no processo de cifragem. Tendo essa matriz, n\u00f3s tiramos a matriz one_hot da mensagem cifrada, e utilizamos a fun\u00e7\u00e3o `np.linalg.solve()`, para achar a matriz da mensagem original, e assim reverte-la de volta para string. A fun\u00e7\u00e3o `np.linalg.solve()` pega a matriz da mensagem cifrada e multiplica pelo inverso da matriz usada de permuta\u00e7\u00e3o, achando assim a matriz original do texto.\n\n- **Enigmar**: Para o processo de enigmar, fazemos quase a mesma coisa que o cifrar. A diferen\u00e7a \u00e9 que ao invez de multiplicar a matriz da mensagem inteira, multiplicamos letra por letra da mensagem, e a cada letra, multiplicamos a matriz permuta\u00e7\u00e3o `P` pela matriz permuta\u00e7\u00e3o `E`. Assim, a matriz do primeiro caracter da mensagem ser\u00e1 multiplicado por `P`, o segundo multiplicado por `P@E` e assim segue. Com esse processo, letras iguais n\u00e3o s\u00e3o cifradas para a mesma letra do novo alfabeto, dificultado a resolu\u00e7\u00e3o do enigma.\n\n- **Resolver enigma**: No processo de resolver o enigma, fazemos quase a mesma coisa que no processo de decifrar, por\u00e9m, como cada letra foi alterada por uma matriz permuta\u00e7\u00e3o diferente, resolvemos letra por letra com a fun\u00e7\u00e3o `np.linalg.solve()`, passando a matriz permuta\u00e7\u00e3o utilizada para cada letra.\n\n",
    "bugtrack_url": null,
    "license": "MIT License",
    "summary": "Biblioteca enigma para aps de Algebra Linear",
    "version": "0.0.1",
    "project_urls": null,
    "split_keywords": [
        "enigma"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ed42069b6c73027110f65f8b6079d65f314544d8317e66ee20c034f8b4e08c91",
                "md5": "042e8edc56da5f22d4590dbd424dd607",
                "sha256": "037cb83999f2c3b70b9933130bb7dcfe0240dc05ca3bf5a060903fd478185341"
            },
            "downloads": -1,
            "filename": "biblioteca_enigma-0.0.1.tar.gz",
            "has_sig": false,
            "md5_digest": "042e8edc56da5f22d4590dbd424dd607",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 4266,
            "upload_time": "2024-03-05T17:45:29",
            "upload_time_iso_8601": "2024-03-05T17:45:29.721954Z",
            "url": "https://files.pythonhosted.org/packages/ed/42/069b6c73027110f65f8b6079d65f314544d8317e66ee20c034f8b4e08c91/biblioteca_enigma-0.0.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-03-05 17:45:29",
    "github": false,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "lcname": "biblioteca-enigma"
}
        
Elapsed time: 0.19715s