27 May 21:09
from Crypto.PublicKey import RSA
# Wczytaj dane binarne (np. 2048 / 8 * 2 = 512 bajtów minimum, najlepiej więcej)
with open("aes.bin", "rb") as f:
entropy_data = f.read()
# Ustaw zmienną indeksu (globalna dla generatora)
entropy_index = 0
# Definiujemy własną funkcję pseudolosową na podstawie pliku
def randfunc(n):
global entropy_index
# Zwróć n bajtów z pliku binarnego
chunk = entropy_data[entropy_index:entropy_index + n]
entropy_index += n
# Zabezpieczenie: zapętlamy jeśli za mało danych
if len(chunk) < n:
chunk += entropy_data[:n - len(chunk)]
return chunk
# Generuj klucz RSA
key = RSA.generate(2048, randfunc=randfunc)
# Zapisz klucze
with open("private.pem", "wb") as f:
f.write(key.export_key())
with open("public.pem", "wb") as f:
f.write(key.publickey().export_key())
print("🔐 Klucze wygenerowane z entropy.bin przy użyciu niestandardowego źródła losowości.")
test.py
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
# 1. Wczytaj klucze
with open("public.pem", "rb") as f:
public_key = RSA.import_key(f.read())
with open("private.pem", "rb") as f:
private_key = RSA.import_key(f.read())
# 2. Szyfrowanie wiadomości
message = "Tajna wiadomość 123 ABC xyz!".encode('utf-8') # ✅ poprawnie
cipher = PKCS1_OAEP.new(public_key)
encrypted = cipher.encrypt(message)
# encrypted = encrypted[:-1] + bytes([encrypted[-1] ^ 0x01])
print("🔒 Zaszyfrowana wiadomość (hex):")
print(encrypted.hex())
# 3. Odszyfrowanie
cipher_dec = PKCS1_OAEP.new(private_key)
decrypted = cipher_dec.decrypt(encrypted)
print("\n🔓 Odszyfrowana wiadomość:")
print(decrypted.decode("utf-8"))