Portál AbcLinuxu, 5. června 2024 18:59


Dotaz: Python RSA PyCrypto -> PyCryptodome

27.5.2022 17:28 srbt | skóre: 6
Python RSA PyCrypto -> PyCryptodome
Přečteno: 477×
Odpovědět | Admin
Rád bych přešel od neudržované knihovny PyCrypto k novější PyCryptodome. Potíž je v tom, že mi PyCryptodome nerozšifruje co PyCrypto zašifrovalo.

Původní kód vypadal zhruba takhle:
from Crypto.PublicKey import RSA

decoded = base64.standard_b64decode(crypted_message)
return RSA.importKey(rsa_decryption_key).decrypt(decoded)
Tenhle kód teď vypíše NotImplementedError: Use module Crypto.Cipher.PKCS1_OAEP instead. Našel jsem tedy návod a změnil kód na:
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP

decoded = base64.standard_b64decode(crypted_message)
key = RSA.importKey(rsa_decryption_key)
decryptor = PKCS1_OAEP.new(key)
return decryptor.decrypt(decoded)
Pokud použiju PyCryptodome pro encrypt i decrypt, funguje to hezky, ale pokud zkusím nový decrypt na starý encrypt, vyhodí to ValueError: Incorrect decryption..

Pokud by někdo náhodou tušil, kde dělám chybu, nebo věděl že to prostě nemá řešení, budu moc rád, když se o tu informaci podělí. Děkuji.
Pro experimentátory přikládám zašifrovanou zprávu "aha":
qSuzVLpUOH5aXN71tZbh70AXycRKbDVKAVb33f7y7WEMFzJ+80dh+YXBdNBeYzVQ0K9j7hE8qz59JbZ0F4AWYr51L6SIv40d7VUDrzQd0umtRb4ZVrpnl4mG5ta8n+7MD6R59v3SOt5UZH9oM3w225P5gYHtykbUeOo1LggqR8rPU0PriOzCozuAHakCPQxHDlDLh63IJHU3WrNGSq5yRQiq+FvdnUDlOdczgmiT6eGZnoys5p/+NrOdH6XC+pczkMS6NKj+Z23PqPBIkGy+2vVy1EOF86n+8VvL1Ew0Y86Ts/X16nutit1rdPobFQf93KNU6JucPaTYN3Mr/st+zg==
a privátní klíč
-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEAyfBPdPSZQiLHdUAWke3s50PuQNhMVyTUjA5pL4ilikTsSkXi
wpqDuj6qbX8aOeLqaUNH9KnVRTAaxtM+iH2k5nl+ZK1RIknyyDyMQi7jLfFN8fts
raFH8HxFNh2DyQ8JpusXwhH8FocuNgpHpQmQMV5KWGv5NtVE1pY7zRW7lf65zJ1j
b6yCsBQxAwu3bJ18Jc5stQq5v+GSUn9mwpHqbbjX2YmgCSRei2Hm3VrTC9CTYSNm
8fWfBBw5sejInlLjDNK/FJ5lTYz4XY63wbN6yBQdUBypo+iAxAinrkz8Pgklriom
1nw5G1YkUEtLQvS98DT8d9/dJBnETCr4hVUgLwIDAQABAoIBAFhMK3IIQbsZWf16
uGO2lQ/KNDNGYJr6D7Xt1zBhn4CGAou3Yx+UUGTvYbXfDaih/71nHd9tI0PNdOfb
Fky4I5JjLVD4N7G2g+HqF6oYtl0wVdSpCywgiUQuElVHMoiHesDxqsHA+2keUqZu
eEVBmTr876UaES5YsnDh3+QczJkYsVi32p6SvnW3wpX6JxE2nfHyw2V9glmtwlSF
6s81fpUXH7g2BXNy7QXmOj2IPnll6wj8iF2L7zzyKmUG8hLpWR73RfTCXf3Q3Spb
QtH6ZYXXTMbpHEmJlZMXTGqDcfFvg/OhliVUpB4HG9YWipU7yhClZuxFNMtlNmvL
2PU6qAECgYEA3LegaD9bldgaRzAm+ea8glHezauf/nxVMwOZV8zef0HjXjspkdX1
GVh7z50lGdQytTyTT662KnS3y/5kyEDZNMRZjICTv/qHXhsEKEDqn6zI2YDhq15a
iuDpBbfS40dfuJ+83GCzDUguCOwVe0cb0b4BXsuh2A7Q6QTQinCBM0ECgYEA6jg2
IEt/Z/rMGXEnYBVofNMSczlvhXSTIECsmpA2gvJ3F/+p+YhM2qHJ7lZXxzXcuGrR
+QNRELX5BG93N3NitBG5nj7G3n9XsXVZ/LtFSXOoSx2B3IPSlAFPqfN5/Hm40Ke/
rZi1gSJi6KyD2Zkp+WDNxvd2Lz6BA7iJ/EtBJ28CgYAX8ti11wIR/TPEu6XPAck8
frOlL1UZ4NXBxkcyLqmJt1V7WQIGr+d7S42Llmp7Jfomjh8Ry0w6yRVUThMTY23t
+swYoa7masGbZWULFRggIThd2U0jMgazAPpnw21fedQaDUMJynhDHazZDPy7tph/
JpWxenjiH6FtVzdlfhWWwQKBgEJjTHQ68hH29IMBn7eMWeGHsmMWlJWvRUSPEF1/
IvRa5YbX4MXp7F7MHQCBWMAOdFGRdZKvbfremYa4UYJWIlQH8iT4hkXqsmCKcsdA
DZOURM+FvZlThAyPkpUJfjoiBlCeO6Zo8ol3xbFNtNGoqE0XMzyCR+18OfVkCTiJ
3B3hAoGABdu7ojnq3CBTJEk/Qw/AIkeo0auzsgJIBX0DRZ+Y4U3JdH88B2QYARV4
RMwOCnKBUtfO2V92XGGk6gnnJWcrbVDOXUdWhRZWWeGkvRX57VDx3dRc9nEw1whx
AFh2PFzyxPOqhEdj8tvpE9pXxK8NuJueZVWW9oc6cMWpeb+vk9U=
-----END RSA PRIVATE KEY-----

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

27.5.2022 18:36 X
Rozbalit Rozbalit vše Re: Python RSA PyCrypto -> PyCryptodome
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nemas OAEP padding.
openssl base64 -d -in message.base64 -out message

rsautl -decrypt -oaep -inkey key.pem -in message -out message.out

140636538956544:error:040A1079:rsa routines:RSA_padding_check_PKCS1_OAEP_mgf1:oaep decoding error:rsa_oaep.c:234:
140636538956544:error:04065072:rsa routines:RSA_EAY_PRIVATE_DECRYPT:padding check failed:rsa_eay.c:602:

openssl rsautl -decrypt -raw -inkey key.pem -in message -out message.out
cat message.out 
aha
Řešení 1× (srbt (tazatel))
27.5.2022 21:12 X
Rozbalit Rozbalit vše Re: Python RSA PyCrypto -> PyCryptodome
28.5.2022 11:02 srbt | skóre: 6
Rozbalit Rozbalit vše Re: Python RSA PyCrypto -> PyCryptodome
Díky moc, pomohlo to. V pythonu2, ve kterém se žel ještě musím pohybovat, to vychází takhle:
def bytes_to_int(bytes):
    result = 0
    for b in bytes:
        result = result * 256 + ord(b)
    return result

def int_to_bytes(value, length):
    result = []
    for i in range(0, length):
        result.append(chr(value >> (i * 8) & 0xff))
    result.reverse()
    return b''.join(result)

def decrypt_rsa(crypted_message, rsa_decryption_key):
  decoded = base64.standard_b64decode(crypted_message)
  key = RSA.importKey(rsa_decryption_key)
  ct_int = bytes_to_int(decoded)
  pt_int = pow(ct_int, key.d, key.n)
  return int_to_bytes(pt_int, key.size_in_bytes()).lstrip(b'\x00')

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.