web-dev-qa-db-ja.com

python 3.7)で文字列を暗号化および復号化するにはどうすればよいですか?

これとまったく同じ質問を見つけました 。しかし、PyCryptoはpython 3.6.5と3.7.0の両方にインストールしません。

そこで、ある種のGronsfeldに似た暗号を実装します。私は知っています、それはひどいですが、パスワードで文字列を暗号化して暗号化解除することができます

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

それで、それを適切に行う方法は?

7
Egor Egorov

暗号化は、暗号化のレシピとプリミティブを提供する、活発に開発されているライブラリです。 Python 2.6-2.7、Python 3.3+およびPyPyをサポートしています。

Installation

$ pip install cryptography

高レベルの対称暗号化レシピを使用したコードの例:

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