Python Cryptography module save/load RSA keys to/from file
使用python的加密模块,
我想将生成的私钥保存到一个文件中,以便以后使用。
但是从这些文档中,我找不到实现这一点所需的方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | from cryptography.hazmat.backends import default_backend from cryptography.hazmat.primitives.asymmetric import rsa from cryptography.hazmat.primitives import serialization from cryptography.hazmat.primitives import hashes from cryptography.hazmat.primitives.asymmetric import padding # Working RSA encryption you can run for yourself MESSAGE = 'I am a very secret message' # Create private key private_key = rsa.generate_private_key( public_exponent=65537, key_size=2048, backend=default_backend() ) # Create public key public_key = private_key.public_key() # Encrypt ciphertext = public_key.encrypt( MESSAGE, padding.OAEP( mgf=padding.MGF1(algorithm=hashes.SHA1()), algorithm=hashes.SHA1(), label=None ) ) # Encrypted text print ciphertext # Decrypt plaintext = private_key.decrypt( ciphertext, padding.OAEP( mgf=padding.MGF1(algorithm=hashes.SHA1()), algorithm=hashes.SHA1(), label=None ) ) # Decrypted text print plaintext # Print human readable key pem = private_key.private_bytes( encoding=serialization.Encoding.PEM, format=serialization.PrivateFormat.TraditionalOpenSSL, encryption_algorithm=serialization.NoEncryption() ) pem_data = pem.splitlines() print pem_data # How to Save//Load |
我知道如何生成密钥,但如何正确地保存到文件中。只需将
由于密码技术对我来说还是个新东西,我想知道在文件中存储RSA密钥的正确方法。
这是我当前的尝试,但我得到了一个错误。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | if os.path.exists('key.pem'): print 'file exist' else: f = open(os.path.join(__location__, 'key.pem'), 'w') for i in pem_data: f.write(i) f.close() with open(os.path.join(__location__, 'key.pem'),"rb") as key_file: private_key = serialization.load_pem_private_key( key_file.read(), password=None, backend=default_backend() ) |
保存私钥的方法会丢弃
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | from cryptography.hazmat.backends import default_backend from cryptography.hazmat.primitives.asymmetric import rsa from cryptography.hazmat.primitives import serialization from cryptography.hazmat.primitives.serialization import load_pem_private_key def gen_key(): private_key = rsa.generate_private_key( public_exponent=65537, key_size=2048, backend=default_backend() ) return private_key def save_key(pk, filename): pem = pk.private_bytes( encoding=serialization.Encoding.PEM, format=serialization.PrivateFormat.TraditionalOpenSSL, encryption_algorithm=serialization.NoEncryption() ) with open(filename, 'wb') as pem_out: pem_out.write(pem) def save_key_bad(pk, filename): pem = pk.private_bytes( encoding=serialization.Encoding.PEM, format=serialization.PrivateFormat.TraditionalOpenSSL, encryption_algorithm=serialization.NoEncryption() ) pem_data = pem.splitlines() with open(filename, 'wb') as pem_out: for line in pem_data: pem_out.write(line) def load_key(filename): with open(filename, 'rb') as pem_in: pemlines = pem_in.read() private_key = load_pem_private_key(pemlines, None, default_backend()) return private_key if __name__ == '__main__': pk = gen_key() filename = 'privkey.pem' save_key(pk, filename) pk2 = load_key(filename) save_key_bad(pk, filename) pk3 = load_key(filename) |