Hỗ trợ thanh toán qua INTERNET BANKING tất cả các ngân hàng:
VietcomBank, BIDV, VietinBank, SacomBank, TechcomBank, Á Châu, TPbank,
MBbank, AgriBank, VPbank, SHB, MaritimeBank, DongAbank, VIB, EximBank,
HDbank, NCB, Việt Á, OceanBank, PGbank, BacAbank...
Bạn cần đăng nhập để tải code qua chức năng này!
ĐĂNG NHẬP NGAY
Hỗ trợ CHUYỂN KHOẢN TRỰC TIẾP qua các số tài khoản ngân hàng:
VietcomBank, BIDV, VietinBank, SacomBank, TechcomBank, Á Châu, TPbank,
MBbank, AgriBank, VPbank, SHB, MaritimeBank
Bạn cần đăng nhập để tải code qua chức năng này!
ĐĂNG NHẬP NGAY
Tôi cần trợ giúp bằng cách sử dụng mã hóa và giải mã RSA bằng Python.
Tôi đang tạo cặp khóa riêng tư / công khai, mã hóa tin nhắn bằng các khóa và ghi tin nhắn vào tệp. Sau đó, tôi đang đọc bản mã từ tệp và giải mã văn bản bằng cách sử dụng khóa.
Tôi đang gặp sự cố với phần giải mã. Như bạn có thể thấy trong đoạn mã của tôi bên dưới, khi tôi đưa vào decrypted = key.decrypt[message]
chương trình đó hoạt động, nhưng thông
báo đã giải mã lại được mã hóa. Có vẻ như nó không đọc bản mã từ tệp.
Bất cứ ai có thể giúp tôi viết mã này để giải mã đọc bản mã từ tệp và sau đó sử dụng khóa để giải mã bản mã?
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[]
- python
- encryption
- rsa
- pycrypto
39 hữu ích 5 bình luận 193k xem chia sẻ
answer
52
Để làm cho nó hoạt động, bạn cần chuyển đổi khóa từ str thành tuple trước khi giải mã [hàm ast.literal_eval]. Đây là mã cố định:
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[]
52 hữu ích 4 bình luận chia sẻ
answer
9
# 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
Và sử dụng
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]
9 hữu ích 0 bình luận chia sẻ
answer
8
PKCS # 1 OAEP là một mật mã không đối xứng dựa trên RSA và phần đệm OAEP
from Crypto.PublicKey import RSA
from Crypto import Random
from Crypto.Cipher import PKCS1_OAEP
def rsa_encrypt_decrypt[]:
key = RSA.generate[2048]
private_key = key.export_key['PEM']
public_key = key.publickey[].exportKey['PEM']
message = input['plain text for RSA encryption and decryption:']
message = str.encode[message]
rsa_public_key = RSA.importKey[public_key]
rsa_public_key = PKCS1_OAEP.new[rsa_public_key]
encrypted_text = rsa_public_key.encrypt[message]
#encrypted_text = b64encode[encrypted_text]
print['your encrypted_text is : {}'.format[encrypted_text]]
rsa_private_key = RSA.importKey[private_key]
rsa_private_key = PKCS1_OAEP.new[rsa_private_key]
decrypted_text = rsa_private_key.decrypt[encrypted_text]
print['your decrypted_text is : {}'.format[decrypted_text]]
8 hữu ích 2 bình luận chia sẻ
answer
3
Đây là cách triển khai của tôi cho python 3 và 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]
3 hữu ích 3 bình luận chia sẻ
answer
1
Bạn có thể sử dụng cách đơn giản để genarate RSA. Sử dụng thư viện rsa
pip install rsa
1 hữu ích 0 bình luận chia sẻ
answer
0
Hãy coi chừng bằng cách sử dụng Crypto !!! Nó là một thư viện tuyệt vời nhưng nó có vấn đề trong python3.8 'vì thời gian thư viện đã bị xóa đồng hồ thuộc tính []. Để khắc phục nó chỉ cần sửa đổi nguồn ở /usr/lib/python3.8/site-packages/Crypto/Random/_UserFriendlyRNG.py
dòng 77 thay đổi t = time.clock[]
intt = time.perf_counter[]
0 hữu ích 0 bình luận chia sẻ