Hướng dẫn how do i encrypt a large file using rsa in python? - làm cách nào để mã hóa một tệp lớn bằng rsa trong python?

  1. Là bản mã kết quả thực tế có thể giải mã được trong dù sao không có khóa riêng không?

Không, bạn sẽ cần khóa riêng. Không có giới hạn thực tế về số lần bạn có thể mã hóa bằng khóa công khai. Tôi sẽ đảm bảo rằng tính ngẫu nhiên trong phần đệm là ít nhất 128 bit. Cũng lưu ý rằng việc giải mã nhiều lần bằng khóa riêng làm cho thuật toán dễ bị tổn thương hơn trước các cuộc tấn công kênh bên (thường dựa vào số liệu thống kê). Hơn nữa, nó không cho phép bạn bảo vệ khóa riêng bằng pin hoặc mật khẩu cho mỗi lần giải mã.

  1. Những yếu tố nào ảnh hưởng đến tốc độ mã hóa trong trường hợp này? Kích thước khóa RSA? Kích thước khối? Loại đệm?

Có, có và có.

Kích thước khóa RSA là vô cùng quan trọng vì kích thước khóa lớn hơn sẽ ảnh hưởng đến hiệu suất. Hơn nữa, kích thước khóa RSA phát triển rất nhanh nếu bạn yêu cầu sức mạnh quan trọng hơn. RSA-3072 đang cung cấp khoảng 128 bit bảo mật, nhưng bạn cần phải vượt quá 16kbit kích thước chính để đạt 256 bit. Và những loại hoạt động đó chắc chắn rất chậm, cụ thể là khi nói đến các hoạt động quan trọng riêng.

Kích thước khối được sử dụng cho bản rõ khác với mã cho bản mã (nghĩa là đầu vào luôn nhỏ hơn đầu ra) do các yêu cầu đệm. Kích thước khối cho bản rõ thường nhỏ hơn 11 so với kích thước khóa cho phần đệm PKCS#1 V1.5 kém an toàn và khác nhau bởi giá trị băm cho OAEP. Kích thước khối của bản mã giống hệt với kích thước của mô đun trong byte.

Loại đệm thường không có nhiều vấn đề khi nói đến tốc độ mã hóa. Các hoạt động khóa riêng của RSA là khá chậm và việc không biết sẽ không mất nhiều thời gian so với chúng. Tuy nhiên, việc tạo ra phần đệm phụ thuộc vào một trình tạo số ngẫu nhiên an toàn. Tạo số ngẫu nhiên có thể nhanh, nhưng nó cũng có thể chặn hoặc làm chậm hệ thống bằng các phương tiện khác.


Lưu ý rằng hiệu suất chỉ là một lý do tại sao mã hóa trực tiếp với RSA nên bị xa lánh. Việc mở rộng bản mã so với bản rõ là một lý do lớn khác. Và như đã chỉ ra, yêu cầu khóa riêng phải có sẵn cho các hoạt động hàng loạt có thể khiến nó gặp rủi ro.

Tôi đã sử dụng mô -đun pycrypto để mã hóa và giải mã với cặp và thuật toán khóa RSA. Vấn đề là khi tôi thử mã hóa các tệp lớn (10kb tệp văn bản), tôi lấy kích thước khối là 32 byte khi đọc tệp và mã hóa nó

>>> f = open('10kb','rb')
>>> p = open('enc','wb')
>>> while True:
       data = f.read(32)
       if not data:
           break
       enc_data = public_key.encrypt(data,32)
       p.write(enc_data[0])
    p.close()
    f.close()

Nó cho đầu ra:

128
128
.......and the many 128 blocks it is writing

Khi tôi cố gắng giải mã tệp được mã hóa, tôi cần đọc nó với khối 128 byte để trả lại các khối 32 byte,

>>> f = open('enc','rb')
>>> p = open('dec','wb')
>>> while True:
       data = f.read(128)
       if not data:
           break
       dec_data = private_key.decrypt(data)
       p.write(dec_data)
    p.close()
    f.close()

Nó đang cho đầu ra:

32
32
.....so many 32 byte blocks it is decrypting, then
128
128
128
128
Traceback (most recent call last):
  File "", line 5, in 
     enc_data = private_key.decrypt(data)
  File "/usr/lib/python3/dist-packages/Crypto/PublicKey/RSA.py", line 174,   in decrypt
     return pubkey.pubkey.decrypt(self, ciphertext)
  File "/usr/lib/python3/dist-packages/Crypto/PublicKey/pubkey.py", line 93, in decrypt
      plaintext=self._decrypt(ciphertext)
  File "/usr/lib/python3/dist-packages/Crypto/PublicKey/RSA.py", line 237, in _decrypt
      cp = self.key._blind(ciphertext, r)
  ValueError: Message too large

Đến mức xuất hiện kích thước khối là 32, nó đang giải mã đúng, nhưng nơi nó bắt đầu với 128, nó gây rối. Tại sao nó nói kích thước tin nhắn quá lớn? Có cách nào tốt hơn và nhanh để giải mã các tệp văn bản lớn bằng mô -đun pycrypto không?

Public key: (n=0x9a11485bccb9569410a848fb1afdf2a81b17c1fa9f9eb546fd1deb873b49b693a4edf20eb8362c085cd5b28ba109dbad2bd257a013f57f745402e245b0cc2d553c7b2b8dbba57ebda7f84cfb32b7d9c254f03dbd0188e4b8e40c47b64c1bd2572834b936ffc3da9953657ef8bee80c49c2c12933c8a34804a00eb4c81248e01f, e=0x10001)

----- Bắt đầu khóa công khai -----

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCaEUhbzLlWlBCoSPsa/fKoGxfB

+p+etUb9HeuHO0m2k6Tt8g64NiwIXNWyi6EJ260r0legE/V/dFQC4kWwzC1VPHsr

jbulfr2n+Ez7MrfZwlTwPb0BiOS45AxHtkwb0lcoNLk2/8PamVNlfvi+6AxJwsEp

Private key: (n=0x9a11485bccb9569410a848fb1afdf2a81b17c1fa9f9eb546fd1deb873b49b693a4edf20eb8362c085cd5b28ba109dbad2bd257a013f57f745402e245b0cc2d553c7b2b8dbba57ebda7f84cfb32b7d9c254f03dbd0188e4b8e40c47b64c1bd2572834b936ffc3da9953657ef8bee80c49c2c12933c8a34804a00eb4c81248e01f, d=0x318ab12be3cf0d4a1b7921cead454fcc42ba070462639483394d6fb9529547827e9c8d23b294a8e01f8a1019da34e350f2307740e06a270bef1fe646e6ad213e31b528fdd5f5d03e633c07c44755ed622a629d79e822c095ebdf9cc80e517b5566dd3d3e5b16ec737987337a0e497fdba4b5ad97af41c1c3cdd87542a4637d81)

----- Bắt đầu khóa riêng RSA -----

MIICXAIBAAKBgQCaEUhbzLlWlBCoSPsa/fKoGxfB+p+etUb9HeuHO0m2k6Tt8g64

NiwIXNWyi6EJ260r0legE/V/dFQC4kWwzC1VPHsrjbulfr2n+Ez7MrfZwlTwPb0B

iOS45AxHtkwb0lcoNLk2/8PamVNlfvi+6AxJwsEpM8ijSASgDrTIEkjgHwIDAQAB

AoGAMYqxK+PPDUobeSHOrUVPzEK6BwRiY5SDOU1vuVKVR4J+nI0jspSo4B+KEBna

NONQ8jB3QOBqJwvvH+ZG5q0hPjG1KP3V9dA+YzwHxEdV7WIqYp156CLAlevfnMgO

UXtVZt09PlsW7HN5hzN6Dkl/26S1rZevQcHDzdh2QqRjfYECQQDGDUIQXlOiAcGo

d5YqAGpWe0wzJ0UypeqZcqS9MVe9OkjjopCkkYntifdN/1oG7S/1KUMtLoGHqntb

c428zOO/AkEAxyV0cmuJbFdfM0x2XhZ+ge/7putIx76RHDOjBpM6VQXpLEFj54kB

qGLAB7SXr7P4AFrEjfckJOp2YMI5BreboQJAb3EUZHt/WeDdJLutzpKPQ3x7oykM

wfQkbxXYZvD16u96BkT6WO/gCb6hXs05zj32x1/hgfHyRvGCGjKKZdtwpwJBAJ74

y0g7h+wwoxJ0S1k4Y6yeQikxUVwCSBxXLCCnjr0ohsaJPJMrz2L30YtVInFkHOlL

i/Q4AWZmtDDxWkx+bYECQG8e6bGoszuX5xjvhEBslIws9+nMzMuYBR8HvhLo58B5

N8dk3nIsLs3UncKLiiWubMAciU5jUxZoqWpRXXwECKE=

----- Kết thúc khóa riêng RSA -----

Encrypted: b'99b331c4e1c8f3fa227aacd57c85f38b7b7461574701b427758ee4f94b1e07d791ab70b55d672ff55dbe133ac0bea16fc23ea84636365f605a9b645e0861ee11d68a7550be8eb35e85a4bde6d73b0b956d000866425511c7920cdc8a3786a4f1cb1986a875373975e158d74e11ad751594de593a35de765fe329c0d3dfbbfedc'

Đã giải mã: B'A Tin nhắn cho mã hóa '

RSA có thể được sử dụng để mã hóa các tệp lớn không?

Mặc dù RSA không lý tưởng để mã hóa các tệp lớn, chúng ta có thể sử dụng nó để mã hóa một tệp chính được tạo từ mã hóa đối xứng AES tiêu chuẩn.Chúng ta hãy xem cách chúng ta có thể kết hợp cả AE và RSA để mã hóa các tệp lớn một cách hiệu quả với nhiều bảo mật hơn.RSA is not ideal for encrypting large files, we can use it to encrypt a key file generated from the standard AES symmetric encryption. Let's look at how we can combine both AES and RSA to encrypt large files efficiently with more security.

Làm thế nào để bạn mã hóa một tệp lớn trong Python?

Tôi đang cố gắng mã hóa tệp lớn hơn 1GB ...
Đọc 4 byte dữ liệu (kích thước).
Phá vỡ nếu dữ liệu là B "".
Chuyển đổi 4 byte đó thành một số nguyên bằng int.From_Bytes (kích thước, "lớn") (num_bytes).
Đọc num_bytes của dữ liệu được mã hóa ..
Giải mã dữ liệu này với Fernet mà không có vấn đề gì ..

Làm cách nào để mã hóa một tệp RSA trong Python?

Steps:..
Nhập thư viện RSA ..
Tạo khóa công khai và riêng tư với RSA.....
Mã hóa chuỗi thành chuỗi byte ..
Sau đó mã hóa chuỗi byte bằng khóa công khai ..
Sau đó chuỗi được mã hóa có thể được giải mã bằng khóa riêng ..
Khóa công khai chỉ có thể được sử dụng để mã hóa và riêng tư chỉ có thể được sử dụng để giải mã ..