web-dev-qa-db-fra.com

Comment chiffrer et déchiffrer une chaîne en python 3.7?

J'ai trouvé exactement la même question . Mais PyCrypto n'installe pas les deux sur python 3.6.5 et 3.7.0.

Donc, j'implémente une sorte de chiffrement de type Gronsfeld. Je sais, c'est affreux, mais je peux simplement crypter et derypt une chaîne avec un mot de passe

def encrypt(string, password):
    int_list = []
    password_len = len(password)
    for cnt, sym in enumerate(string):
        password_sym = password[cnt % password_len]
        int_list.append(ord(sym)-ord(password_sym))
    return int_list

# got some list which contain mine key to Todoist api, yes, this can be bruteforced, but same as any other API key
>>> [-20, -20, -50, -14, -61, -54, 2, 0, 32, 27, -51, -21, -54, -53, 4, 3, 29, -14, -51, 29, -10, -6, 1, 4, 28,
       29, -55, -17, -59, -42, 2, 50, -13, -14, -52, -15, -56, -59, -44, 4]

def decrypt(int_list, password):
    output_string = ""
    password_len = len(password)
    for cnt, numb in enumerate(int_list):
        password_sym = password[cnt % password_len]
        output_string += chr(numb+ord(password_sym))
    return output_string

Alors, comment le faire correctement?

6
Egor Egorov

La cryptographie est une bibliothèque développée activement qui fournit des recettes et des primitives cryptographiques. Il prend en charge Python 2.6-2.7, Python 3.3+ et PyPy.

Installation

$ pip install cryptography

Exemple de code utilisant une recette de chiffrement symétrique de haut niveau:

from cryptography.fernet import Fernet
key = Fernet.generate_key()
cipher_suite = Fernet(key)
cipher_text = cipher_suite.encrypt(b"A really secret message. Not for prying eyes.")
plain_text = cipher_suite.decrypt(cipher_text)
12
Sathiyakugan