🐍 ВычислСниС ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Ρ… сумм с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Python ΠΈ Hashlib

Π’ ΠΌΠΈΡ€Π΅ кибСрбСзопасности ΠΈ поиска ΡƒΠ³Ρ€ΠΎΠ· вычислСниС ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Ρ… сумм являСтся ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠΉ для обСспСчСния цСлостности Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ подлинности Ρ„Π°ΠΉΠ»ΠΎΠ².

ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅ суммы – это ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ значСния, сгСнСрированныС ΠΈΠ· содСрТимого Ρ„Π°ΠΉΠ»Π°, ΠΈ ΠΎΠ½ΠΈ Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ ΠΊΠ°ΠΊ Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹Π΅ ΠΎΡ‚ΠΏΠ΅Ρ‡Π°Ρ‚ΠΊΠΈ ΠΏΠ°Π»ΡŒΡ†Π΅Π².

Π’ Python Π΅ΡΡ‚ΡŒ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ hashlib, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Ρ… сумм, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ MD5, SHA1 ΠΈ SHA256.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ расскаТСм Π²Π°ΠΌ ΠΎ процСссС вычислСния ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Ρ… сумм с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Python ΠΈ модуля hashlib.

Π¨Π°Π³ 1: Π˜ΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ

Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ hashlib, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдоставляСт Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для вычислСния ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Ρ… сумм.

import hashlib

Π¨Π°Π³ 2: ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Π”Π°Π»Π΅Π΅ ΠΌΡ‹ опрСдСляСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ compute_checksums, которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° file_path.

Π­Ρ‚Π° функция Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅ суммы MD5, SHA1 ΠΈ SHA256 для Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°.

def compute_checksums(file_path):

    hash_md5 = hashlib.md5()

    hash_sha1 = hashlib.sha1()

    hash_sha256 = hashlib.sha256()

Π¨Π°Π³ 3: ΠžΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ Ρ„Π°ΠΉΠ»

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ Ρ„Π°ΠΉΠ», ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Π² file_path, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° with, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΈ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°.

with open(file_path, "rb") as f:

Π¨Π°Π³ 4. Π§Ρ‚Π΅Π½ΠΈΠ΅ ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Ρ… сумм

ΠœΡ‹ Ρ‡ΠΈΡ‚Π°Π΅ΠΌ Ρ„Π°ΠΉΠ» кусками ΠΏΠΎ 4096 Π±Π°ΠΉΡ‚ ΠΈ обновляСм ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅ суммы для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ куска.

Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ эффСктивСн для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с большими Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ.

for chunk in iter(lambda: f.read(4096), b""):

            hash_md5.update(chunk)

            hash_sha1.update(chunk)

            hash_sha256.update(chunk)

Π¨Π°Π³ 5: Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Ρ… сумм

ПослС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ всСго Ρ„Π°ΠΉΠ»Π° ΠΌΡ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ вычислСнныС ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅ суммы Π² Π²ΠΈΠ΄Π΅ словаря, содСрТащСго значСния MD5, SHA1 ΠΈ SHA256.

return {"md5": hash_md5.hexdigest(), "sha1": hash_sha1.hexdigest(), "sha256": hash_sha256.hexdigest()}

ΠŸΠΎΠ»Π½Ρ‹ΠΉ ΠΊΠΎΠ΄: Π—Π΄Π΅ΡΡŒ прСдставлСн ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² своСй Ρ€Π°Π±ΠΎΡ‚Π΅:

import hashlib



def compute_checksums(file_path):

    hash_md5 = hashlib.md5()

    hash_sha1 = hashlib.sha1()

    hash_sha256 = hashlib.sha256()



    with open(file_path, "rb") as f:

        for chunk in iter(lambda: f.read(4096), b""):

            hash_md5.update(chunk)

            hash_sha1.update(chunk)

            hash_sha256.update(chunk)



    return {"md5": hash_md5.hexdigest(), "sha1": hash_sha1.hexdigest(), "sha256": hash_sha256.hexdigest()}

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ этот ΠΊΠΎΠ΄, Π²Ρ‹ смоТСтС Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅ суммы MD5, SHA1 ΠΈ SHA256 для любого ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π²Π°ΠΌΠΈ Ρ„Π°ΠΉΠ»Π°.

Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… сцСнариях кибСрбСзопасности ΠΈ поиска ΡƒΠ³Ρ€ΠΎΠ· для обСспСчСния цСлостности ΠΈ подлинности Ρ„Π°ΠΉΠ»ΠΎΠ².

см. Ρ‚Π°ΠΊΠΆΠ΅:

Β 



2023-12-20T10:50:47
Π‘ΠΊΡ€ΠΈΠΏΡ‚Ρ‹

Π”Ρ€ΡƒΠ·ΡŒΡ ΠΏΠΎΠΌΠΎΠ³ΠΈΡ‚Π΅ этому ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Ρƒ ΡΡ‚Π°Ρ‚ΡŒ доступнСС Π² ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… сСтях.

НС ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈ ΠΌΠΈΠΌΠΎ ΠΆΠΌΠ°ΠΊΠ½ΠΈ ΠΏΠΎ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΌΡƒ Ρ‚ΠΎ Π΅Ρ‰Π΅ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π΅Π½!