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?
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)