Skip to main content

Quickly generates the encryption of texts and files. Using RSA and Fernet as a base.

Project description

DENcrypt

v.0.1.1

Módulo criado com o objetivo de facilitar a criptografia/descriptografia de textos e arquivos.

Utiliza como base as criptografias:

  • RSA (Assimétrica)

    • Encrypt (Chave Pública)/Decrypt (Chave Privada)
    • Lento; Uso recomendado em conteúdo com tamanho máximo de 256 bytes
  • Fernet (Simétrica)

    • EncryptFile (Chave Única)/DecryptFile (Chave Única)
    • Rápido; Uso recomendado para arquivos

Requisitos

python = "^3.9"
rsa = "^4.7.2"
cryptography = "^35.0.0"

Instalação

pip install dencrypt

Como Funciona - Via Código

config. inicial do projeto

exemplo/
├─ arquivos/
   ├─ dados1.txt
   ├─ dados2.csv
├─ arquivos-crip/
├─ keys/
├─ main.py

main.py

from dencrypt import (
    Crypt, # Gera Chaves Pública/Privada RSA e Simétrica Fernet 
    Encrypt, Decrypt, # Realiza En/Decriptação RSA
    EncryptFile, DecryptFile # Realiza En/Decriptação Fernet
)

# 1. Gerando as Chaves
cr = Crypt().generate_all_keys()
cr.pubkey       # b'-----BEGIN RSA PUBLIC KEY-----  MIIBCgKCAQEAhBF7c...'
cr.privkey      # b'-----BEGIN RSA PRIVATE KEY----- MIIEqQIBAAKCAQEAd...'
cr.symmetrickey # b'KqqI5Ncke0TSzBJFrE0SM3xuHz11tv689A1PhmkewkE='

# 1.1. Salvando arquivos das chaves
cr.save_all_keys(location="keys/")
exemplo/
├─ arquivos/
   ├─ dados1.txt
   ├─ dados2.csv
├─ arquivos-crip/
├─ keys/
   ├─ privatekey.key
   ├─ publickey.key
   ├─ symmetrickey.key
├─ main.py
# 2. Criptografando Arquivos com a Chave Simétrica

# 2.1. Arquivo dados1.txt
encr = EncryptFile("arquivos/dados1.txt", key="keys/symmetrickey.key")
encr.content # Conteúdo Original: b'Teste 1\nTeste 2\nTest...'
encr.get()   # Conteúdo Criptog.: b'\xc3\x8a\xc3\xa2\xc3\xaa\xc3\xae...'

# Salvando arquivo com conteúdo criptografado
encr.save("arquivos-crip/dados1.txt.dencrypt") 

# 2.2. Arquivo dados2.csv
encr = EncryptFile("arquivos/dados2.csv", key="keys/symmetrickey.key")
encr.save("arquivos-crip/dados2.csv.dencrypt")
exemplo/
├─ arquivos/
   ├─ dados1.txt
   ├─ dados2.csv
├─ arquivos-crip/
   ├─ dados1.txt.dencrypt
   ├─ dados2.csv.dencrypt
├─ keys/
   ├─ privatekey.key
   ├─ publickey.key
   ├─ symmetrickey.key
├─ main.py
# 3. Criptografando Chave Simétrica com Chave Pública RSA
encr = Encrypt("keys/symmetrickey.key", pubkey="keys/publickey.key")
encr.save("arquivos-crip/secreta.key")
├─ arquivos-crip/
   ├─ secreta.key
   ├─ dados1.txt.dencrypt
   ├─ dados2.csv.dencrypt
# 4. Descriptografando Arquivos

# 4.1. Descriptografando Chave Simétrica com Chave Privada RSA
skey = Decrypt("arquivos-crip/secreta.key", privkey="keys/privatekey.key")
skey = skey.get() # b'KqqI5Ncke0TSzBJFrE0SM3xuHz11tv689A1PhmkewkE='

#  4.2. Descriptografando dados1.txt.dencrypt
decr = DecryptFile("arquivos-crip/dados1.txt.dencrypt", key=skey)
decr.save("arquivos-crip/dados1.txt")

#  4.3. Descriptografando dados2.csv.dencrypt
decr = DecryptFile("arquivos-crip/dados2.csv.dencrypt", key=skey)
decr.save("arquivos-crip/dados2.csv")
exemplo/
├─ arquivos/
   ├─ dados1.txt
   ├─ dados2.csv
├─ arquivos-crip/
   ├─ secreta.key
   ├─ dados1.txt
   ├─ dados1.txt.dencrypt
   ├─ dados2.csv
   ├─ dados2.csv.dencrypt
├─ keys/
   ├─ privatekey.key
   ├─ publickey.key
   ├─ symmetrickey.key
├─ main.py
# 5. Realizando comparação de conteúdo
with (
    open("arquivos/dados1.txt") as d1_original,
    open("arquivos/dados2.csv") as d2_original,
    open("arquivos-crip/dados1.txt.dencrypt") as d1_crip,
    open("arquivos-crip/dados2.csv.dencrypt") as d2_crip,
    open("arquivos-crip/dados1.txt") as d1_decrip,
    open("arquivos-crip/dados2.csv") as d2_decrip
):
    # Reads
    d1_original_read = d1_original.read()
    d2_original_read = d2_original.read()
    d1_crip_read = d1_crip.read()
    d2_crip_read = d2_crip.read()
    d1_decrip_read = d1_decrip.read()
    d2_decrip_read = d2_decrip.read()

    # Original com Criptografado
    d1_original_read == d1_crip_read # False
    d2_original_read == d2_crip_read # False

    # Original com Descriptografado
    d1_original_read == d1_decrip_read # True
    d2_original_read == d2_decrip_read # True

Download: examples/exemplo.zip

Como Funciona - Via CLI

Exemplos de uso:
    + Verificando Versão
        > dencrypt --version | > dencrypt -v

    + Gerando chaves
        - Pública RSA (2048), Privada RSA (2048) e Simétrica Fernet
            > dencrypt --keys | > dencrypt -k

        - Apenas Simétrica Fernet
            > dencrypt --keys --norsa | > dencrypt -k -nr

        - Apenas Pública/Privada RSA (Tamanho 1024)
            > dencrypt --keys --nofer -size 1024 | > dencrypt -k -nf -s 1024
        
        - Pública/Privada RSA (2048) e Simétrica Fernet escolhendo local para salvar
            > dencrypt --keys --location "C:/user/User/Desktop" | > dencrypt -l "C:/user/User/Desktop"
        
        - Pú./Pr. RSA (2048) e Sim. Fer. adicionando prefixo e sufixo e alterando 
          extensão nos nomes dos arquivos das chaves
            > dencrypt --keys --prefix "B1_" --sufix "_1B" --ext ".chave" 
            > dencrypt -k -px "B1_" -sx "_1B" -e ".chave"
            
            Exemplo de resultado padrão sem aplicar "-px", "-sx" e "-e"
                - privatekey.key
                - publickey.key
                - symmetrickey.key
            
            Exemplo de resultado aplicando "-px", "-sx" e "-e"
                - B1_privatekey_1B.chave
                - B1_publickey_1B.chave
                - B1_symmetrickey_1B.chave

    + Encriptando arquivos/conteúdo
        - Com chave Simétrica Fernet
            > dencrypt --encrypt --input "arquivo.jpg" --skey "symmetrickey.key"
                        -enc      -i                    -sk
            Será gerado um novo arquivo chamado "arquivo.jpg.dencrypt"

        - Com chave Pública RSA
            > dencrypt -enc -i "arquivo.jpg" --pkey "publickey.key"
                                              -pk
            Será gerado um novo arquivo chamado "arquivo.jpg.dencrypt"
            ! Esta encriptação é limitada ao seu tamanho. Caso a chave seja de 
              2048 bits (Padrão), suportará um conteúdo de no máximo 256 bytes

        - Texto
            > ... -i "Texto Secreto" -sk ... --forcetext 
                                              -ft
            Será gerado um novo arquivo chamado "Texto Secreto.dencrypt" com o texto 
              criptografado de conteúdo
            Porém como podemos observar, o nome do arquivo se mantém com o do conteúdo
              secreto, abaixo veja exemplos de como renomear o arquivo com `output`      
        
        - Utilizando `--ext` e `--output` para salvar arquivo com nome diferente
            ? DICA: `--output` possui alguns format strings
                %FILENAME = Retorna o nome completo do arquivo original - Ex: "arquivo.jpg"
                %FILEEXT  = Retorna apenas a extensão do arquivo original - Ex: ".jpg"
                %FILE     = Retorna o nome do arquivo original - Ex: "arquivo"
                %EXT"     = Retorna a extensão enviada através do `--ext` - Por padrão é ".dencrypt"
                %DATETIME = Retorna a data do momento, seguinto o formado: ddmmaaaahhmmss 
                %RAND"    = Retorna um número aleatório entre 100.000 e 999.999
            
            > ... --ext ".louco" --output "a"
                   -e             -o
            Será gerado um novo arquivo chamado "a.louco" em vez de "arquivo.jpg.dencrypt"
            
            > ... -e ".louco" -o "%FILENAME%EXT"  |  > ... -e ".teste" -o "%FILE_%DATETIME%EXT"
            Resultará em "arquivo.jpg.louco"      |  Resultará em "arquivo_281020210252.teste"
            
            > ... --ext ".abcabc" --output "%RAND%EXT"  |  > ... --ext ".abcabc"
            Resultará em "734582.abcabc"                |  Resultará em "arquivo.jpg.abcabc" 
        
        - Múltiplos arquivos
          > dencrypt --encrypt --allfiles --skey "symmetrickey.key"
                                -af
          Todos arquivos da pasta atual serão criptografados e salvos em uma 
          nova pasta (criada no mesmo diretório) chamada "dencrypt_encrypt_202110280323" 
          com a data atual no final
          O nome dos novos arquivos seguirá o formato "nome.ext.dencrypt", Ex: "imagem.jpg.dencrypt"
          ! Os arquivos originais ainda serão mantidos

          > ... --allfiles ... --extignore "jpg, png, py"
                                -eig
          Realizará o mesmo processo anterior, porém ignorando arquivos com as extensões informadas
          .jpg, .png e .py

        - Comandos persistentes
          --replace ou -r = Força a substituição de qualquer arquivo existente com o mesmo nome
          --force ou -f   = Ignora qualquer aviso, e avança automaticamente 

    + Decriptando arquivos/conteúdo
      - Funcionamento semelhante ao `--encrypt`, porém, agora deve ser passado via `--input`
        o arquivo já criptografado

      - Com chave Simétrica Fernet
        > dencrypt --decrypt --input "arquivo.jpg.dencrypt" --skey "symmetrickey.key"
                    -dec      -i                    -sk
        Será gerado um novo arquivo chamado "arquivo.jpg"

      - Com chave PRIVADA RSA
        > dencrypt -dec -i "arquivo.jpg.dencrypt" --pkey "privatekey.key"
                                                   -pk
        Será gerado um novo arquivo chamado "arquivo.jpg"

      ...

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dencrypt-0.1.1.tar.gz (15.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

dencrypt-0.1.1-py3-none-any.whl (19.2 kB view details)

Uploaded Python 3

File details

Details for the file dencrypt-0.1.1.tar.gz.

File metadata

  • Download URL: dencrypt-0.1.1.tar.gz
  • Upload date:
  • Size: 15.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.11 CPython/3.9.7 Linux/4.4.0-19041-Microsoft

File hashes

Hashes for dencrypt-0.1.1.tar.gz
Algorithm Hash digest
SHA256 3caef9090fae6c3f06a57c2c1c2cf88f26c0b45bb20e5a76a9cf905236eedb0c
MD5 d3543fde3f5a15eeb5f5ce1486576efa
BLAKE2b-256 b91b658abb5da113cb349107adcf2c30d0eb78212b1e41a619052bc31c867345

See more details on using hashes here.

File details

Details for the file dencrypt-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: dencrypt-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 19.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.11 CPython/3.9.7 Linux/4.4.0-19041-Microsoft

File hashes

Hashes for dencrypt-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 e1f2ccda5bc8bb4643d5fb9568b8f5118a66d98be7311fe0fb86003ec0b6aef8
MD5 46e3dfdd3aa86e5184c2f09dd3247b70
BLAKE2b-256 7b28ce8cc4635a0638a97a2a882854f4b6c7baf87570ae99bf8ca3f94d67c267

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page