with password online how hash_hmac example encrypt descifrar decrypt como cifrar python encryption rsa pycrypto

python - password - how to decrypt hash 256



Cifrado y descifrado RSA en Python (4)

Necesito ayuda para usar el cifrado y descifrado RSA en Python.

Estoy creando un par de claves privadas / públicas, cifrando un mensaje con claves y escribiendo el mensaje en un archivo. Luego estoy leyendo el texto cifrado del archivo y descifrando el texto usando la clave.

Estoy teniendo problemas con la parte de descifrado. Como puede ver en mi código a continuación, cuando puse en decrypted = key.decrypt(message) que el programa funciona, el mensaje descifrado se cifra nuevamente. Parece que no está leyendo el texto cifrado del archivo.

¿Puede alguien ayudarme a escribir este código para que el descifrado lea el texto cifrado del archivo y luego use la clave para descifrar el texto cifrado?

import Crypto from Crypto.PublicKey import RSA from Crypto import Random random_generator = Random.new().read key = RSA.generate(1024, random_generator) #generate public and private keys publickey = key.publickey # pub key export for exchange encrypted = publickey.encrypt(''encrypt this message'', 32) #message to encrypt is in the above line ''encrypt this message'' print ''encrypted message:'', encrypted #ciphertext f = open (''encryption.txt'', ''w''w) f.write(str(encrypted)) #write ciphertext to file f.close() #decrypted code below f = open (''encryption.txt'', ''r'') message = f.read() decrypted = key.decrypt(message) print ''decrypted'', decrypted f = open (''encryption.txt'', ''w'') f.write(str(message)) f.write(str(decrypted)) f.close()


Aquí está mi implementación para python 3 y pycrypto

from Crypto.PublicKey import RSA key = RSA.generate(4096) f = open(''/home/john/Desktop/my_rsa_public.pem'', ''wb'') f.write(key.publickey().exportKey(''PEM'')) f.close() f = open(''/home/john/Desktop/my_rsa_private.pem'', ''wb'') f.write(key.exportKey(''PEM'')) f.close() f = open(''/home/john/Desktop/my_rsa_public.pem'', ''rb'') f1 = open(''/home/john/Desktop/my_rsa_private.pem'', ''rb'') key = RSA.importKey(f.read()) key1 = RSA.importKey(f1.read()) x = key.encrypt(b"dddddd",32) print(x) z = key1.decrypt(x) print(z)


Para que funcione, es necesario convertir la clave de str a tuple antes del descifrado (función ast.literal_eval). Aquí está el código fijo:

import Crypto from Crypto.PublicKey import RSA from Crypto import Random import ast random_generator = Random.new().read key = RSA.generate(1024, random_generator) #generate pub and priv key publickey = key.publickey() # pub key export for exchange encrypted = publickey.encrypt(''encrypt this message'', 32) #message to encrypt is in the above line ''encrypt this message'' print ''encrypted message:'', encrypted #ciphertext f = open (''encryption.txt'', ''w'') f.write(str(encrypted)) #write ciphertext to file f.close() #decrypted code below f = open(''encryption.txt'', ''r'') message = f.read() decrypted = key.decrypt(ast.literal_eval(str(encrypted))) print ''decrypted'', decrypted f = open (''encryption.txt'', ''w'') f.write(str(message)) f.write(str(decrypted)) f.close()


# coding: utf-8 from __future__ import unicode_literals import base64 import os import six from Crypto import Random from Crypto.PublicKey import RSA class PublicKeyFileExists(Exception): pass class RSAEncryption(object): PRIVATE_KEY_FILE_PATH = None PUBLIC_KEY_FILE_PATH = None def encrypt(self, message): public_key = self._get_public_key() public_key_object = RSA.importKey(public_key) random_phrase = ''M'' encrypted_message = public_key_object.encrypt(self._to_format_for_encrypt(message), random_phrase)[0] # use base64 for save encrypted_message in database without problems with encoding return base64.b64encode(encrypted_message) def decrypt(self, encoded_encrypted_message): encrypted_message = base64.b64decode(encoded_encrypted_message) private_key = self._get_private_key() private_key_object = RSA.importKey(private_key) decrypted_message = private_key_object.decrypt(encrypted_message) return six.text_type(decrypted_message, encoding=''utf8'') def generate_keys(self): """Be careful rewrite your keys""" random_generator = Random.new().read key = RSA.generate(1024, random_generator) private, public = key.exportKey(), key.publickey().exportKey() if os.path.isfile(self.PUBLIC_KEY_FILE_PATH): raise PublicKeyFileExists(''Файл с публичным ключом существует. Удалите ключ'') self.create_directories() with open(self.PRIVATE_KEY_FILE_PATH, ''w'') as private_file: private_file.write(private) with open(self.PUBLIC_KEY_FILE_PATH, ''w'') as public_file: public_file.write(public) return private, public def create_directories(self, for_private_key=True): public_key_path = self.PUBLIC_KEY_FILE_PATH.rsplit(''/'', 1) if not os.path.exists(public_key_path): os.makedirs(public_key_path) if for_private_key: private_key_path = self.PRIVATE_KEY_FILE_PATH.rsplit(''/'', 1) if not os.path.exists(private_key_path): os.makedirs(private_key_path) def _get_public_key(self): """run generate_keys() before get keys """ with open(self.PUBLIC_KEY_FILE_PATH, ''r'') as _file: return _file.read() def _get_private_key(self): """run generate_keys() before get keys """ with open(self.PRIVATE_KEY_FILE_PATH, ''r'') as _file: return _file.read() def _to_format_for_encrypt(value): if isinstance(value, int): return six.binary_type(value) for str_type in six.string_types: if isinstance(value, str_type): return value.encode(''utf8'') if isinstance(value, six.binary_type): return value

Y use

KEYS_DIRECTORY = settings.SURVEY_DIR_WITH_ENCRYPTED_KEYS class TestingEncryption(RSAEncryption): PRIVATE_KEY_FILE_PATH = KEYS_DIRECTORY + ''private.key'' PUBLIC_KEY_FILE_PATH = KEYS_DIRECTORY + ''public.key'' # django/flask from django.core.files import File class ProductionEncryption(RSAEncryption): PUBLIC_KEY_FILE_PATH = settings.SURVEY_DIR_WITH_ENCRYPTED_KEYS + ''public.key'' def _get_private_key(self): """run generate_keys() before get keys """ from corportal.utils import global_elements private_key = global_elements.request.FILES.get(''private_key'') if private_key: private_key_file = File(private_key) return private_key_file.read() message = ''Hello мой friend'' encrypted_mes = ProductionEncryption().encrypt(message) decrypted_mes = ProductionEncryption().decrypt(message)


from Crypto.Cipher import DES des = DES.new(''01234567'', DES.MODE_ECB) text = "abcdefgh8" leno = len(text) if leno % 8 != 0: for i in range(0, 8 -leno%8): text += " " cipher_text = des.encrypt(text) des.decrypt(cipher_text)

Básicamente, en el código anterior puede cifrar su texto con una contraseña como "01234567" y descifrarlo nuevamente con esa contraseña. Es simple. La única precaución es que la longitud del texto debe tener un poder de 8, por lo que hay un pequeño bucle que agrega suficiente espacio para que la longitud del texto sea divisible entre 8. Eso es.