Файл у Python кантрольныя сумы

Я ствараю дадатак, звязанае з файламі. І я шукаў шляху для вылічэнні кантрольных сум для файлаў. Я хачу ведаць, што гэта лепшы метад хэшавання для вылічэнні кантрольных сум файлаў md5 або SHA-1 ці нешта іншае на падставе гэтага крытэрыяў

  • Кантрольная сума павінна быць унікальнай. Я ведаю, што яго тэарэтычны, але ўсё ж я хачу, каб верагоднасць сутыкненняў быць вельмі і вельмі мала.
  • Можна параўнаць два файла, роўнымі, калі кантрольныя сумы роўныя ці не.
  • Хуткасць (не вельмі важна, але ўсё ж)

Калі ласка, не саромейцеся, як тлумачальны, наколькі гэта магчыма.

4
Дзякуючы. І калі вы можаце, калі ласка, адправіць адказ, паказаўшы ўсе гэта лепш, чым спосаб і я магу сцвярджаць гэта.
дададзена аўтар Saransh Mohapatra, крыніца
Дзякуючы. І калі вы можаце, калі ласка, адправіць адказ, паказаўшы ўсе гэта лепш, чым спосаб і я магу сцвярджаць гэта.
дададзена аўтар Saransh Mohapatra, крыніца
Дзякуючы. І калі вы можаце, калі ласка, адправіць адказ, паказаўшы ўсе гэта лепш, чым спосаб і я магу сцвярджаць гэта.
дададзена аўтар Saransh Mohapatra, крыніца
Добра. Я разумею, аб сутыкненні рэчы. Так што я павінен зрабіць, каб праверыць унікальнасць файла.
дададзена аўтар Saransh Mohapatra, крыніца
І ні ў якое параўнанне, які адзін з іх хутчэй ?? І я буду ўпэўнены, што калі два файла мае тое ж кантрольную суму, чым яны роўныя?
дададзена аўтар Saransh Mohapatra, крыніца
І ні ў якое параўнанне, які адзін з іх хутчэй ?? І я буду ўпэўнены, што калі два файла мае тое ж кантрольную суму, чым яны роўныя?
дададзена аўтар Saransh Mohapatra, крыніца
І ні ў якое параўнанне, які адзін з іх хутчэй ?? І я буду ўпэўнены, што калі два файла мае тое ж кантрольную суму, чым яны роўныя?
дададзена аўтар Saransh Mohapatra, крыніца
Добра. Я разумею, аб сутыкненні рэчы. Так што я павінен зрабіць, каб праверыць унікальнасць файла.
дададзена аўтар Saransh Mohapatra, крыніца
Добра. Я разумею, аб сутыкненні рэчы. Так што я павінен зрабіць, каб праверыць унікальнасць файла.
дададзена аўтар Saransh Mohapatra, крыніца
md5, як правіла, выдатна падыходзіць для кантрольных сум ... тое ж самае з SHA-1 ... абодва маюць вельмі малую верагоднасць сутыкненняў, хоць я думаю, SHA-1 мае некалькі меншую верагоднасць сутыкнення, паколькі яна выкарыстоўвае больш бітаў
дададзена аўтар Joran Beasley, крыніца
md5, як правіла, выдатна падыходзіць для кантрольных сум ... тое ж самае з SHA-1 ... абодва маюць вельмі малую верагоднасць сутыкненняў, хоць я думаю, SHA-1 мае некалькі меншую верагоднасць сутыкнення, паколькі яна выкарыстоўвае больш бітаў
дададзена аўтар Joran Beasley, крыніца
Вы можаце выкарыстоўваць абодва кантрольныя сумы (адзін md5 і sha1) адзін шанец, што і матч, і файлы адрозніваюцца нікчэмна мала (да гэтага часу не 100% немагчыма, але вельмі вельмі вельмі малаверагодна) ... звычайна (чытайце: у кожным выпадку я калі-небудзь сутыкаўся ) MD5-ці супадзенне SHA1 дастаткова выказаць здагадку, унікальнасць
дададзена аўтар Joran Beasley, крыніца
Вы можаце выкарыстоўваць абодва кантрольныя сумы (адзін md5 і sha1) адзін шанец, што і матч, і файлы адрозніваюцца нікчэмна мала (да гэтага часу не 100% немагчыма, але вельмі вельмі вельмі малаверагодна) ... звычайна (чытайце: у кожным выпадку я калі-небудзь сутыкаўся ) MD5-ці супадзенне SHA1 дастаткова выказаць здагадку, унікальнасць
дададзена аўтар Joran Beasley, крыніца
Вы можаце выкарыстоўваць абодва кантрольныя сумы (адзін md5 і sha1) адзін шанец, што і матч, і файлы адрозніваюцца нікчэмна мала (да гэтага часу не 100% немагчыма, але вельмі вельмі вельмі малаверагодна) ... звычайна (чытайце: у кожным выпадку я калі-небудзь сутыкаўся ) MD5-ці супадзенне SHA1 дастаткова выказаць здагадку, унікальнасць
дададзена аўтар Joran Beasley, крыніца
Вы не можаце запусціць timeit супраць іх ... і няма яго не 100% гарантыя ... толькі вельмі малаверагодна, каб сутыкнення ...
дададзена аўтар Joran Beasley, крыніца
Вы не можаце запусціць timeit супраць іх ... і няма яго не 100% гарантыя ... толькі вельмі малаверагодна, каб сутыкнення ...
дададзена аўтар Joran Beasley, крыніца
Вы не можаце запусціць timeit супраць іх ... і няма яго не 100% гарантыя ... толькі вельмі малаверагодна, каб сутыкнення ...
дададзена аўтар Joran Beasley, крыніца
md5, як правіла, выдатна падыходзіць для кантрольных сум ... тое ж самае з SHA-1 ... абодва маюць вельмі малую верагоднасць сутыкненняў, хоць я думаю, SHA-1 мае некалькі меншую верагоднасць сутыкнення, паколькі яна выкарыстоўвае больш бітаў
дададзена аўтар Joran Beasley, крыніца
Вы турбуецеся пра каго-то наўмысна спрабуе генераваць сутыкнення (напрыклад, такім чынам, яны могуць распаўсюджваць падробленыя файл і падмануць вашыя чэкі)? Ці проста выпадковыя сутыкнення?
дададзена аўтар abarnert, крыніца
Вы турбуецеся пра каго-то наўмысна спрабуе генераваць сутыкнення (напрыклад, такім чынам, яны могуць распаўсюджваць падробленыя файл і падмануць вашыя чэкі)? Ці проста выпадковыя сутыкнення?
дададзена аўтар abarnert, крыніца
Вы турбуецеся пра каго-то наўмысна спрабуе генераваць сутыкнення (напрыклад, такім чынам, яны могуць распаўсюджваць падробленыя файл і падмануць вашыя чэкі)? Ці проста выпадковыя сутыкнення?
дададзена аўтар abarnert, крыніца
@JoranBeasley: Там сапраўды не так шмат карысці ў праверцы як MD5 і SHA1. Вы эфектыўна рабіць двойчы працу значна менш, чым 1% дадатковай выгады.
дададзена аўтар abarnert, крыніца
@JoranBeasley: Там сапраўды не так шмат карысці ў праверцы як MD5 і SHA1. Вы эфектыўна рабіць двойчы працу значна менш, чым 1% дадатковай выгады.
дададзена аўтар abarnert, крыніца
@JoranBeasley: Там сапраўды не так шмат карысці ў праверцы як MD5 і SHA1. Вы эфектыўна рабіць двойчы працу значна менш, чым 1% дадатковай выгады.
дададзена аўтар abarnert, крыніца

12 адказы

Гэта залежыць ад вашага выкарыстання.

Калі вы турбуецеся толькі аб выпадковых сутычках, як MD5 і SHA-1 выдатна, і MD5, як правіла, хутчэй. На самай справе, MD4 таксама дастаткова для большасці выпадкаў выкарыстання, і, як правіла, нават хутчэй ... але гэта не так шырока рэалізаваная. (У прыватнасці, ён не ў hashlib.algorithms_guaranteed ... хоць яна павінна быць у hashlib_algorithms_available на большасці складзе Mac, Windows і Linux будуе.)

З іншага боку, калі вы турбуецеся аб наўмыснай атацы нешта ёсць., Хтосьці мае намер крафт фіктыўнага файла, які адпавядае вашай хэш-вы павінны ўлічваць каштоўнасць таго, што вы абараняеце. MD4 амаль дакладна не дастаткова, MD5, верагодна, не дастаткова, але SHA-1 з'яўляецца памежным. У цяперашні час Keccak (які неўзабаве ад SHA-3), як мяркуюць, з'яўляецца лепшым выбарам, але вы хочаце, каб застацца на вяршыні гэтага, таму што ўсё мяняецца кожны год.

Старонка Вікіпедыі на крыптаграфічнай хэш-функцыі ёсць табліца, якая звычайна абнаўляецца даволі часта. Каб зразумець табліцу:

Для таго, каб вырабіць сутыкненне супраць MD4 патрабуе толькі 3 раўндаў, у той час як MD5 патрабуецца каля 2 мільёнаў, а SHA-1 патрабуе 15 трлн. Гэтага дастаткова, што гэта будзе каштаваць некалькі мільёнаў даляраў (у сённяшніх цэнах), каб стварыць сутыкненне. Гэта можа ці не можа быць дастаткова добра для вас, але гэта не дастаткова добра для NIST.


Акрамя таго, памятайце, што «як правіла, хутчэй» не так важна, як «праходзяць хутчэй на маіх дадзеных і платформы». Маючы гэта на ўвазе, у 64-бітным Python 3.3.0 на маім Mac, я стварыў 1MB Рэндзі байт аб'ект, то зрабіў гэта:

In [173]: md4 = hashlib.new('md4')
In [174]: md5 = hashlib.new('md5')
In [175]: sha1 = hashlib.new('sha1')
In [180]: %timeit md4.update(data)
1000 loops, best of 3: 1.54 ms per loop
In [181]: %timeit md5.update(data)
100 loops, best of 3: 2.52 ms per loop
In [182]: %timeit sha1.update(data)
100 loops, best of 3: 2.94 ms per loop

Як вы можаце бачыць, MD4 значна хутчэй, чым іншыя.

Тэсты з выкарыстаннем hashlib.md5() замест hashlib.new ( 'md5') і выкарыстоўваючы байт менш энтропийных (прагонаў 1- 8 string.ascii_letters , падзеленых прабеламі) не паказалі якіх-небудзь істотных адрозненняў.

І, для алгарытмаў хэшавання, якія прыйшлі з маёй устаноўкай, як выпрабаванае ніжэй, нічога не біць MD4.

for x in hashlib.algorithms_available:
    h = hashlib.new(x)
    print(x, timeit.timeit(lambda: h.update(data), number=100))

Калі хуткасць сапраўды важна, ёсць добры трук вы можаце выкарыстоўваць, каб палепшыць гэта: Выкарыстоўвайце дрэнны, але вельмі хутка, хэш-функцыі, як zlib.adler32 , і выкарыстоўваць яго толькі для першых 256 КБ кожны файл. (Для некаторых тыпаў файлаў, апошні 256Кб, або 256Кб бліжэйшы да цэнтру, не перавышаючы, і г.д. можа быць лепш, чым першы.) Тады, калі вы выявіце, сутыкненне, генераваць MD4/SHA-1/Keccak/усе хэшы на ўвесь файл для кожнага файла.


Нарэшце, так як нехта спытаў у каментары да тым, як хэш файла без чытання цалкам у памяць:

def hash_file(path, algorithm='md5', bufsize=8192):
    h = hashlib.new(algorithm)
    with open(path, 'rb') as f:
        block = f.read(bufsize)
        if not block:
            break
        h.update(block)
    return h.digest()

Калі выціскаючы кожны біт прадукцыйнасці мае важнае значэнне, вы хочаце паэксперыментаваць з рознымі значэннямі BUFSIZE на вашай платформе (паўнамоцтвы двух з 4KB да 8MB). Вы таксама можаце паэксперыментаваць з выкарыстаннем зыходных дэскрыптараў файлаў ( os.open і os.read ), які часам можа быць хутчэй на некаторых платформах.

5
дададзена
Няма хуткасці не не так важна, але толькі разгляд. Я вырашыў выкарыстоўваць алгарытм SHA-1, як я думаў, што гэта будзе выдатная сумесь для хуткасці і бяспекі. Як вы думаеце, яго добры выбар?
дададзена аўтар Saransh Mohapatra, крыніца
Я спадзяваўся, што калі вы можаце дапамагчы мне ў іншым пытанні таксама ... калі ласка глядзіце і паглядзець, калі вы можаце дапамагчы. stackoverflow.com/questions/16816815/authentication-in-andro‌ Ідэнтыфікатар </а >
дададзена аўтар Saransh Mohapatra, крыніца
Я ўхваліў свой адказ, як я знайшоў, што гэта тлумачальная адзін. дзякуй
дададзена аўтар Saransh Mohapatra, крыніца
@SaranshMohapatra: Ну, у мяне няма інфармацыі, каб быць упэўненым, што гэта правільны кампраміс для выпадку выкарыстання або няма ... але гэта добры выбар даволі часта, таму гэта так часта, так што я, вядома, не здзіўлюся, калі гэта быў добры выбар для вас.
дададзена аўтар abarnert, крыніца

Гэта залежыць ад вашага выкарыстання.

Калі вы турбуецеся толькі аб выпадковых сутычках, як MD5 і SHA-1 выдатна, і MD5, як правіла, хутчэй. На самай справе, MD4 таксама дастаткова для большасці выпадкаў выкарыстання, і, як правіла, нават хутчэй ... але гэта не так шырока рэалізаваная. (У прыватнасці, ён не ў hashlib.algorithms_guaranteed ... хоць яна павінна быць у hashlib_algorithms_available на большасці складзе Mac, Windows і Linux будуе.)

З іншага боку, калі вы турбуецеся аб наўмыснай атацы нешта ёсць., Хтосьці мае намер крафт фіктыўнага файла, які адпавядае вашай хэш-вы павінны ўлічваць каштоўнасць таго, што вы абараняеце. MD4 амаль дакладна не дастаткова, MD5, верагодна, не дастаткова, але SHA-1 з'яўляецца памежным. У цяперашні час Keccak (які неўзабаве ад SHA-3), як мяркуюць, з'яўляецца лепшым выбарам, але вы хочаце, каб застацца на вяршыні гэтага, таму што ўсё мяняецца кожны год.

Старонка Вікіпедыі на крыптаграфічнай хэш-функцыі ёсць табліца, якая звычайна абнаўляецца даволі часта. Каб зразумець табліцу:

Для таго, каб вырабіць сутыкненне супраць MD4 патрабуе толькі 3 раўндаў, у той час як MD5 патрабуецца каля 2 мільёнаў, а SHA-1 патрабуе 15 трлн. Гэтага дастаткова, што гэта будзе каштаваць некалькі мільёнаў даляраў (у сённяшніх цэнах), каб стварыць сутыкненне. Гэта можа ці не можа быць дастаткова добра для вас, але гэта не дастаткова добра для NIST.


Акрамя таго, памятайце, што «як правіла, хутчэй» не так важна, як «праходзяць хутчэй на маіх дадзеных і платформы». Маючы гэта на ўвазе, у 64-бітным Python 3.3.0 на маім Mac, я стварыў 1MB Рэндзі байт аб'ект, то зрабіў гэта:

In [173]: md4 = hashlib.new('md4')
In [174]: md5 = hashlib.new('md5')
In [175]: sha1 = hashlib.new('sha1')
In [180]: %timeit md4.update(data)
1000 loops, best of 3: 1.54 ms per loop
In [181]: %timeit md5.update(data)
100 loops, best of 3: 2.52 ms per loop
In [182]: %timeit sha1.update(data)
100 loops, best of 3: 2.94 ms per loop

Як вы можаце бачыць, MD4 значна хутчэй, чым іншыя.

Тэсты з выкарыстаннем hashlib.md5() замест hashlib.new ( 'md5') і выкарыстоўваючы байт менш энтропийных (прагонаў 1- 8 string.ascii_letters , падзеленых прабеламі) не паказалі якіх-небудзь істотных адрозненняў.

І, для алгарытмаў хэшавання, якія прыйшлі з маёй устаноўкай, як выпрабаванае ніжэй, нічога не біць MD4.

for x in hashlib.algorithms_available:
    h = hashlib.new(x)
    print(x, timeit.timeit(lambda: h.update(data), number=100))

Калі хуткасць сапраўды важна, ёсць добры трук вы можаце выкарыстоўваць, каб палепшыць гэта: Выкарыстоўвайце дрэнны, але вельмі хутка, хэш-функцыі, як zlib.adler32 , і выкарыстоўваць яго толькі для першых 256 КБ кожны файл. (Для некаторых тыпаў файлаў, апошні 256Кб, або 256Кб бліжэйшы да цэнтру, не перавышаючы, і г.д. можа быць лепш, чым першы.) Тады, калі вы выявіце, сутыкненне, генераваць MD4/SHA-1/Keccak/усе хэшы на ўвесь файл для кожнага файла.


Нарэшце, так як нехта спытаў у каментары да тым, як хэш файла без чытання цалкам у памяць:

def hash_file(path, algorithm='md5', bufsize=8192):
    h = hashlib.new(algorithm)
    with open(path, 'rb') as f:
        block = f.read(bufsize)
        if not block:
            break
        h.update(block)
    return h.digest()

Калі выціскаючы кожны біт прадукцыйнасці мае важнае значэнне, вы хочаце паэксперыментаваць з рознымі значэннямі BUFSIZE на вашай платформе (паўнамоцтвы двух з 4KB да 8MB). Вы таксама можаце паэксперыментаваць з выкарыстаннем зыходных дэскрыптараў файлаў ( os.open і os.read ), які часам можа быць хутчэй на некаторых платформах.

5
дададзена
Няма хуткасці не не так важна, але толькі разгляд. Я вырашыў выкарыстоўваць алгарытм SHA-1, як я думаў, што гэта будзе выдатная сумесь для хуткасці і бяспекі. Як вы думаеце, яго добры выбар?
дададзена аўтар Saransh Mohapatra, крыніца
Я спадзяваўся, што калі вы можаце дапамагчы мне ў іншым пытанні таксама ... калі ласка глядзіце і паглядзець, калі вы можаце дапамагчы. stackoverflow.com/questions/16816815/authentication-in-andro‌ Ідэнтыфікатар </а >
дададзена аўтар Saransh Mohapatra, крыніца
Я ўхваліў свой адказ, як я знайшоў, што гэта тлумачальная адзін. дзякуй
дададзена аўтар Saransh Mohapatra, крыніца
@SaranshMohapatra: Ну, у мяне няма інфармацыі, каб быць упэўненым, што гэта правільны кампраміс для выпадку выкарыстання або няма ... але гэта добры выбар даволі часта, таму гэта так часта, так што я, вядома, не здзіўлюся, калі гэта быў добры выбар для вас.
дададзена аўтар abarnert, крыніца

Гэта залежыць ад вашага выкарыстання.

Калі вы турбуецеся толькі аб выпадковых сутычках, як MD5 і SHA-1 выдатна, і MD5, як правіла, хутчэй. На самай справе, MD4 таксама дастаткова для большасці выпадкаў выкарыстання, і, як правіла, нават хутчэй ... але гэта не так шырока рэалізаваная. (У прыватнасці, ён не ў hashlib.algorithms_guaranteed ... хоць яна павінна быць у hashlib_algorithms_available на большасці складзе Mac, Windows і Linux будуе.)

З іншага боку, калі вы турбуецеся аб наўмыснай атацы нешта ёсць., Хтосьці мае намер крафт фіктыўнага файла, які адпавядае вашай хэш-вы павінны ўлічваць каштоўнасць таго, што вы абараняеце. MD4 амаль дакладна не дастаткова, MD5, верагодна, не дастаткова, але SHA-1 з'яўляецца памежным. У цяперашні час Keccak (які неўзабаве ад SHA-3), як мяркуюць, з'яўляецца лепшым выбарам, але вы хочаце, каб застацца на вяршыні гэтага, таму што ўсё мяняецца кожны год.

Старонка Вікіпедыі на крыптаграфічнай хэш-функцыі ёсць табліца, якая звычайна абнаўляецца даволі часта. Каб зразумець табліцу:

Для таго, каб вырабіць сутыкненне супраць MD4 патрабуе толькі 3 раўндаў, у той час як MD5 патрабуецца каля 2 мільёнаў, а SHA-1 патрабуе 15 трлн. Гэтага дастаткова, што гэта будзе каштаваць некалькі мільёнаў даляраў (у сённяшніх цэнах), каб стварыць сутыкненне. Гэта можа ці не можа быць дастаткова добра для вас, але гэта не дастаткова добра для NIST.


Акрамя таго, памятайце, што «як правіла, хутчэй» не так важна, як «праходзяць хутчэй на маіх дадзеных і платформы». Маючы гэта на ўвазе, у 64-бітным Python 3.3.0 на маім Mac, я стварыў 1MB Рэндзі байт аб'ект, то зрабіў гэта:

In [173]: md4 = hashlib.new('md4')
In [174]: md5 = hashlib.new('md5')
In [175]: sha1 = hashlib.new('sha1')
In [180]: %timeit md4.update(data)
1000 loops, best of 3: 1.54 ms per loop
In [181]: %timeit md5.update(data)
100 loops, best of 3: 2.52 ms per loop
In [182]: %timeit sha1.update(data)
100 loops, best of 3: 2.94 ms per loop

Як вы можаце бачыць, MD4 значна хутчэй, чым іншыя.

Тэсты з выкарыстаннем hashlib.md5() замест hashlib.new ( 'md5') і выкарыстоўваючы байт менш энтропийных (прагонаў 1- 8 string.ascii_letters , падзеленых прабеламі) не паказалі якіх-небудзь істотных адрозненняў.

І, для алгарытмаў хэшавання, якія прыйшлі з маёй устаноўкай, як выпрабаванае ніжэй, нічога не біць MD4.

for x in hashlib.algorithms_available:
    h = hashlib.new(x)
    print(x, timeit.timeit(lambda: h.update(data), number=100))

Калі хуткасць сапраўды важна, ёсць добры трук вы можаце выкарыстоўваць, каб палепшыць гэта: Выкарыстоўвайце дрэнны, але вельмі хутка, хэш-функцыі, як zlib.adler32 , і выкарыстоўваць яго толькі для першых 256 КБ кожны файл. (Для некаторых тыпаў файлаў, апошні 256Кб, або 256Кб бліжэйшы да цэнтру, не перавышаючы, і г.д. можа быць лепш, чым першы.) Тады, калі вы выявіце, сутыкненне, генераваць MD4/SHA-1/Keccak/усе хэшы на ўвесь файл для кожнага файла.


Нарэшце, так як нехта спытаў у каментары да тым, як хэш файла без чытання цалкам у памяць:

def hash_file(path, algorithm='md5', bufsize=8192):
    h = hashlib.new(algorithm)
    with open(path, 'rb') as f:
        block = f.read(bufsize)
        if not block:
            break
        h.update(block)
    return h.digest()

Калі выціскаючы кожны біт прадукцыйнасці мае важнае значэнне, вы хочаце паэксперыментаваць з рознымі значэннямі BUFSIZE на вашай платформе (паўнамоцтвы двух з 4KB да 8MB). Вы таксама можаце паэксперыментаваць з выкарыстаннем зыходных дэскрыптараў файлаў ( os.open і os.read ), які часам можа быць хутчэй на некаторых платформах.

5
дададзена
Я спадзяваўся, што калі вы можаце дапамагчы мне ў іншым пытанні таксама ... калі ласка глядзіце і паглядзець, калі вы можаце дапамагчы. stackoverflow.com/questions/16816815/authentication-in-andro‌ Ідэнтыфікатар </а >
дададзена аўтар Saransh Mohapatra, крыніца
Няма хуткасці не не так важна, але толькі разгляд. Я вырашыў выкарыстоўваць алгарытм SHA-1, як я думаў, што гэта будзе выдатная сумесь для хуткасці і бяспекі. Як вы думаеце, яго добры выбар?
дададзена аўтар Saransh Mohapatra, крыніца
Я ўхваліў свой адказ, як я знайшоў, што гэта тлумачальная адзін. дзякуй
дададзена аўтар Saransh Mohapatra, крыніца
@SaranshMohapatra: Ну, у мяне няма інфармацыі, каб быць упэўненым, што гэта правільны кампраміс для выпадку выкарыстання або няма ... але гэта добры выбар даволі часта, таму гэта так часта, так што я, вядома, не здзіўлюся, калі гэта быў добры выбар для вас.
дададзена аўтар abarnert, крыніца

Магчымасці сутыкнення з хэш памерам дастатковых бітаў, тэарэтычна , даволі мала:

<�Р> Мяркуючы, што выпадковыя значэння хэш-функцыі з раўнамерным размеркаваннем, калекцыя   н розныя блокі дадзеных і хэш-функцыя, якая генеруе біты б,   верагоднасць р таго, што там будзе адзін ці некалькі сутыкненняў абмежавана   па колькасці пар блокаў, памножанай на верагоднасць таго, што   дадзеная пара сутыкнецца, то ёсць </р>

enter image description here

І да гэтага часу, SHA-1 сутыкненне з 160 бітамі былі незаўважным. Мяркуючы, што адзін эксабайт (10 ^ 18) дадзеных, у 8KB блокаў, тэарэтычная верагоднасць сутыкнення складае 10 ^ -20 - вельмі і вельмі маленькі шанец.

Карысны ярлык для ліквідацыі файлаў вядомых адрознівацца адзін ад аднаго праз кароткае замыканне.

Напрыклад, у агульных рысах:

  1. Прачытайце першыя X блокі ўсіх файлаў, якія ўяўляюць цікавасць;
  2. Адсартавана той, якія маюць адзін і той жа хэш для першых X блокаў, патэнцыйна той жа файл даных;
  3. Для кожнага файла з першымі X блокамі, якія з'яўляюцца унікальнымі, можна выказаць здагадку, увесь файл унікальны супраць усіх іншых пратэставаных файлаў - вам не трэба, каб прачытаць астатнюю частку гэтага файла;
  4. З астатнімі файламі, чытайце больш блокаў, пакуль вы не дакажаце подпісы з'яўляюцца аднолькавымі або рознымі.

З X блокамі дастатковага памеру, 95% + файлы будуць правільна дыскрымінацыі ў унікальныя файлы ў першым праходзе. Гэта нашмат хутчэй, чым слепа чытае ўвесь файл і вылічэнне поўнай Хэш для кожнага файла.

2
дададзена

Магчымасці сутыкнення з хэш памерам дастатковых бітаў, тэарэтычна , даволі мала:

<�Р> Мяркуючы, што выпадковыя значэння хэш-функцыі з раўнамерным размеркаваннем, калекцыя   н розныя блокі дадзеных і хэш-функцыя, якая генеруе біты б,   верагоднасць р таго, што там будзе адзін ці некалькі сутыкненняў абмежавана   па колькасці пар блокаў, памножанай на верагоднасць таго, што   дадзеная пара сутыкнецца, то ёсць </р>

enter image description here

І да гэтага часу, SHA-1 сутыкненне з 160 бітамі былі незаўважным. Мяркуючы, што адзін эксабайт (10 ^ 18) дадзеных, у 8KB блокаў, тэарэтычная верагоднасць сутыкнення складае 10 ^ -20 - вельмі і вельмі маленькі шанец.

Карысны ярлык для ліквідацыі файлаў вядомых адрознівацца адзін ад аднаго праз кароткае замыканне.

Напрыклад, у агульных рысах:

  1. Прачытайце першыя X блокі ўсіх файлаў, якія ўяўляюць цікавасць;
  2. Адсартавана той, якія маюць адзін і той жа хэш для першых X блокаў, патэнцыйна той жа файл даных;
  3. Для кожнага файла з першымі X блокамі, якія з'яўляюцца унікальнымі, можна выказаць здагадку, увесь файл унікальны супраць усіх іншых пратэставаных файлаў - вам не трэба, каб прачытаць астатнюю частку гэтага файла;
  4. З астатнімі файламі, чытайце больш блокаў, пакуль вы не дакажаце подпісы з'яўляюцца аднолькавымі або рознымі.

З X блокамі дастатковага памеру, 95% + файлы будуць правільна дыскрымінацыі ў унікальныя файлы ў першым праходзе. Гэта нашмат хутчэй, чым слепа чытае ўвесь файл і вылічэнне поўнай Хэш для кожнага файла.

2
дададзена

Магчымасці сутыкнення з хэш памерам дастатковых бітаў, тэарэтычна , даволі мала:

<�Р> Мяркуючы, што выпадковыя значэння хэш-функцыі з раўнамерным размеркаваннем, калекцыя   н розныя блокі дадзеных і хэш-функцыя, якая генеруе біты б,   верагоднасць р таго, што там будзе адзін ці некалькі сутыкненняў абмежавана   па колькасці пар блокаў, памножанай на верагоднасць таго, што   дадзеная пара сутыкнецца, то ёсць </р>

enter image description here

І да гэтага часу, SHA-1 сутыкненне з 160 бітамі былі незаўважным. Мяркуючы, што адзін эксабайт (10 ^ 18) дадзеных, у 8KB блокаў, тэарэтычная верагоднасць сутыкнення складае 10 ^ -20 - вельмі і вельмі маленькі шанец.

Карысны ярлык для ліквідацыі файлаў вядомых адрознівацца адзін ад аднаго праз кароткае замыканне.

Напрыклад, у агульных рысах:

  1. Прачытайце першыя X блокі ўсіх файлаў, якія ўяўляюць цікавасць;
  2. Адсартавана той, якія маюць адзін і той жа хэш для першых X блокаў, патэнцыйна той жа файл даных;
  3. Для кожнага файла з першымі X блокамі, якія з'яўляюцца унікальнымі, можна выказаць здагадку, увесь файл унікальны супраць усіх іншых пратэставаных файлаў - вам не трэба, каб прачытаць астатнюю частку гэтага файла;
  4. З астатнімі файламі, чытайце больш блокаў, пакуль вы не дакажаце подпісы з'яўляюцца аднолькавымі або рознымі.

З X блокамі дастатковага памеру, 95% + файлы будуць правільна дыскрымінацыі ў унікальныя файлы ў першым праходзе. Гэта нашмат хутчэй, чым слепа чытае ўвесь файл і вылічэнне поўнай Хэш для кожнага файла.

2
дададзена

md5, як правіла, выдатна падыходзіць для кантрольных сум ... тое ж самае з SHA-1 ... абодва маюць вельмі малую верагоднасць сутыкненняў, хоць я думаю, SHA-1 мае некалькі меншую верагоднасць сутыкнення, паколькі яна выкарыстоўвае больш бітаў

калі вы сапраўды занепакоеныя гэтым, вы можаце выкарыстоўваць абодва кантрольныя сумы (адзін md5 і sha1) адзін шанец, што абодва матчы і файлы адрозніваюцца нікчэмна мала (да гэтага часу не 100% немагчыма, але вельмі вельмі вельмі малаверагодна) ... (гэта, здаецца, як дрэнная форма і, безумоўна, самае павольнае рашэнне)

звычайна (чытай: у кожным выпадку я калі-небудзь сутыкаўся) MD5-ці супадзенне SHA1 досыць лічыць унікальнасць

няма ніякага спосабу, 100% гарантыя унікальнасці хапае побайтно comparisson

1
дададзена
дастаткова справядліва ... (Я галасаваў свой адказ уверх і IMHO яго правільным, адзіная прычына, чаму я адправіў гэта ў адказ выклікае OP напрасіўся з маіх каментароў.), але на самой справе ваш адказ сумуе гэта лепш
дададзена аўтар Joran Beasley, крыніца
MD5 дастаткова лічыць унікальнасць, калі можна выказаць здагадку, што ніхто не гатовы выдаткаваць $ 14 на суму камп'ютэрнага часу атакаваць вас. Што добра, калі няма ніякіх прычын для каго атакаваць вас, але гэта вельмі небяспечна блізка да колькасці намаганняў, якія могуць быць каштуюць для некаторых сумныя 14-гадовага зрабіць проста для задавальнення ...
дададзена аўтар abarnert, крыніца
Мой каментар не азначае, што ваш адказ з'яўляецца няправільным; гэта проста азначае, што ОП павінна вызначыць яе выпадак выкарыстання перад <�я> любы </я> адказ правільны ... Калі прыступы не праблема (ці яны ёсць, але MD5 забяспечвае дастатковую абарону), усё ў парадку.
дададзена аўтар abarnert, крыніца

md5, як правіла, выдатна падыходзіць для кантрольных сум ... тое ж самае з SHA-1 ... абодва маюць вельмі малую верагоднасць сутыкненняў, хоць я думаю, SHA-1 мае некалькі меншую верагоднасць сутыкнення, паколькі яна выкарыстоўвае больш бітаў

калі вы сапраўды занепакоеныя гэтым, вы можаце выкарыстоўваць абодва кантрольныя сумы (адзін md5 і sha1) адзін шанец, што абодва матчы і файлы адрозніваюцца нікчэмна мала (да гэтага часу не 100% немагчыма, але вельмі вельмі вельмі малаверагодна) ... (гэта, здаецца, як дрэнная форма і, безумоўна, самае павольнае рашэнне)

звычайна (чытай: у кожным выпадку я калі-небудзь сутыкаўся) MD5-ці супадзенне SHA1 досыць лічыць унікальнасць

няма ніякага спосабу, 100% гарантыя унікальнасці хапае побайтно comparisson

1
дададзена
дастаткова справядліва ... (Я галасаваў свой адказ уверх і IMHO яго правільным, адзіная прычына, чаму я адправіў гэта ў адказ выклікае OP напрасіўся з маіх каментароў.), але на самой справе ваш адказ сумуе гэта лепш
дададзена аўтар Joran Beasley, крыніца
Мой каментар не азначае, што ваш адказ з'яўляецца няправільным; гэта проста азначае, што ОП павінна вызначыць яе выпадак выкарыстання перад <�я> любы </я> адказ правільны ... Калі прыступы не праблема (ці яны ёсць, але MD5 забяспечвае дастатковую абарону), усё ў парадку.
дададзена аўтар abarnert, крыніца
MD5 дастаткова лічыць унікальнасць, калі можна выказаць здагадку, што ніхто не гатовы выдаткаваць $ 14 на суму камп'ютэрнага часу атакаваць вас. Што добра, калі няма ніякіх прычын для каго атакаваць вас, але гэта вельмі небяспечна блізка да колькасці намаганняў, якія могуць быць каштуюць для некаторых сумныя 14-гадовага зрабіць проста для задавальнення ...
дададзена аўтар abarnert, крыніца

md5, як правіла, выдатна падыходзіць для кантрольных сум ... тое ж самае з SHA-1 ... абодва маюць вельмі малую верагоднасць сутыкненняў, хоць я думаю, SHA-1 мае некалькі меншую верагоднасць сутыкнення, паколькі яна выкарыстоўвае больш бітаў

калі вы сапраўды занепакоеныя гэтым, вы можаце выкарыстоўваць абодва кантрольныя сумы (адзін md5 і sha1) адзін шанец, што абодва матчы і файлы адрозніваюцца нікчэмна мала (да гэтага часу не 100% немагчыма, але вельмі вельмі вельмі малаверагодна) ... (гэта, здаецца, як дрэнная форма і, безумоўна, самае павольнае рашэнне)

звычайна (чытай: у кожным выпадку я калі-небудзь сутыкаўся) MD5-ці супадзенне SHA1 досыць лічыць унікальнасць

няма ніякага спосабу, 100% гарантыя унікальнасці хапае побайтно comparisson

1
дададзена
дастаткова справядліва ... (Я галасаваў свой адказ уверх і IMHO яго правільным, адзіная прычына, чаму я адправіў гэта ў адказ выклікае OP напрасіўся з маіх каментароў.), але на самой справе ваш адказ сумуе гэта лепш
дададзена аўтар Joran Beasley, крыніца
Мой каментар не азначае, што ваш адказ з'яўляецца няправільным; гэта проста азначае, што ОП павінна вызначыць яе выпадак выкарыстання перад <�я> любы </я> адказ правільны ... Калі прыступы не праблема (ці яны ёсць, але MD5 забяспечвае дастатковую абарону), усё ў парадку.
дададзена аўтар abarnert, крыніца
MD5 дастаткова лічыць унікальнасць, калі можна выказаць здагадку, што ніхто не гатовы выдаткаваць $ 14 на суму камп'ютэрнага часу атакаваць вас. Што добра, калі няма ніякіх прычын для каго атакаваць вас, але гэта вельмі небяспечна блізка да колькасці намаганняў, якія могуць быць каштуюць для некаторых сумныя 14-гадовага зрабіць проста для задавальнення ...
дададзена аўтар abarnert, крыніца

я стварыў невялікія дублікаты файлаў для выдалення сцэнара некалькі дзён таму, які счытвае змесціва файла і стварыць хэш для яго, а затым параўнаць са наступным файлам, у якім, нават калі імя адрозніваецца кантрольнай сумай будзе тое жа самым. ,

import hashlib
import os

hash_table = {}
dups = []
path = "C:\\images"
for img in os.path.listdir(path):
    img_path = os.path.join(path, img)
    _file = open(img_path, "rb")
    content = _file.read()
    _file.close()
    md5 = hashlib.md5(content)
    _hash = md5.hexdigest()

    if _hash in hash_table.keys():
        dups.append(img)
    else:
        hash_table[_hash] = img    
0
дададзена
Але гэта напэўна, што файлы не могуць быць рознымі для тых жа кантрольных сум?
дададзена аўтар Saransh Mohapatra, крыніца
@abhishekgarg я не папрасіць метаду, як разлічыць, але, як вы напісалі яго ўніз. Проста дазвольце мне сказаць вам яго вельмі дрэнны метад для вылічэння кантрольнай сумы, асабліва калі яго вялікі файл, як вы чытаеце яго цалкам у памяць. Хочаце ведаць, лепшы спосаб, чым задаць пытанне, я мог бы адказаць на лепшы метад.
дададзена аўтар Saransh Mohapatra, крыніца
Ці разумееце вы, як MD5 генеруецца ... глядзіце на вясёлкавых табліц для прыкладаў рэчаў, якія маюць аднолькавую кантрольную суму, але адрозніваюцца: P
дададзена аўтар Joran Beasley, крыніца
няма ... няма ніякага спосабу, каб гарантаваць аднастайнасць акрамя праверкі пабайтная ... няма ніякага цэтліка ... гэта вельмі малаверагодна, каб сутыкнуцца, але ён усё яшчэ мог ...
дададзена аўтар Joran Beasley, крыніца
@abhishekgarg: Я абнавіў свой адказ, каб паказаць, як хэш файла, не чытаючы ўсё гэта ў памяці.
дададзена аўтар abarnert, крыніца
ніколі не здаралася са мной, хоць ..
дададзена аўтар abhishekgarg, крыніца
@SaranshMohapatra, калі ласка, скажыце мне лепшы спосаб :), ім заўсёды адчыненыя, каб даведацца, я толькі пачаў.
дададзена аўтар abhishekgarg, крыніца
@abarnert: дзякуй
дададзена аўтар abhishekgarg, крыніца
калі змесціва файла такое ж, то лагічна яны з'яўляюцца дублікатамі, што азначае, што яны будуць ствараць такую ​​ж суму.
дададзена аўтар abhishekgarg, крыніца

я стварыў невялікія дублікаты файлаў для выдалення сцэнара некалькі дзён таму, які счытвае змесціва файла і стварыць хэш для яго, а затым параўнаць са наступным файлам, у якім, нават калі імя адрозніваецца кантрольнай сумай будзе тое жа самым. ,

import hashlib
import os

hash_table = {}
dups = []
path = "C:\\images"
for img in os.path.listdir(path):
    img_path = os.path.join(path, img)
    _file = open(img_path, "rb")
    content = _file.read()
    _file.close()
    md5 = hashlib.md5(content)
    _hash = md5.hexdigest()

    if _hash in hash_table.keys():
        dups.append(img)
    else:
        hash_table[_hash] = img    
0
дададзена
@abhishekgarg я не папрасіць метаду, як разлічыць, але, як вы напісалі яго ўніз. Проста дазвольце мне сказаць вам яго вельмі дрэнны метад для вылічэння кантрольнай сумы, асабліва калі яго вялікі файл, як вы чытаеце яго цалкам у памяць. Хочаце ведаць, лепшы спосаб, чым задаць пытанне, я мог бы адказаць на лепшы метад.
дададзена аўтар Saransh Mohapatra, крыніца
Але гэта напэўна, што файлы не могуць быць рознымі для тых жа кантрольных сум?
дададзена аўтар Saransh Mohapatra, крыніца
Ці разумееце вы, як MD5 генеруецца ... глядзіце на вясёлкавых табліц для прыкладаў рэчаў, якія маюць аднолькавую кантрольную суму, але адрозніваюцца: P
дададзена аўтар Joran Beasley, крыніца
няма ... няма ніякага спосабу, каб гарантаваць аднастайнасць акрамя праверкі пабайтная ... няма ніякага цэтліка ... гэта вельмі малаверагодна, каб сутыкнуцца, але ён усё яшчэ мог ...
дададзена аўтар Joran Beasley, крыніца
@abhishekgarg: Я абнавіў свой адказ, каб паказаць, як хэш файла, не чытаючы ўсё гэта ў памяці.
дададзена аўтар abarnert, крыніца
ніколі не здаралася са мной, хоць ..
дададзена аўтар abhishekgarg, крыніца
калі змесціва файла такое ж, то лагічна яны з'яўляюцца дублікатамі, што азначае, што яны будуць ствараць такую ​​ж суму.
дададзена аўтар abhishekgarg, крыніца
@SaranshMohapatra, калі ласка, скажыце мне лепшы спосаб :), ім заўсёды адчыненыя, каб даведацца, я толькі пачаў.
дададзена аўтар abhishekgarg, крыніца
@abarnert: дзякуй
дададзена аўтар abhishekgarg, крыніца

я стварыў невялікія дублікаты файлаў для выдалення сцэнара некалькі дзён таму, які счытвае змесціва файла і стварыць хэш для яго, а затым параўнаць са наступным файлам, у якім, нават калі імя адрозніваецца кантрольнай сумай будзе тое жа самым. ,

import hashlib
import os

hash_table = {}
dups = []
path = "C:\\images"
for img in os.path.listdir(path):
    img_path = os.path.join(path, img)
    _file = open(img_path, "rb")
    content = _file.read()
    _file.close()
    md5 = hashlib.md5(content)
    _hash = md5.hexdigest()

    if _hash in hash_table.keys():
        dups.append(img)
    else:
        hash_table[_hash] = img    
0
дададзена
Але гэта напэўна, што файлы не могуць быць рознымі для тых жа кантрольных сум?
дададзена аўтар Saransh Mohapatra, крыніца
@abhishekgarg я не папрасіць метаду, як разлічыць, але, як вы напісалі яго ўніз. Проста дазвольце мне сказаць вам яго вельмі дрэнны метад для вылічэння кантрольнай сумы, асабліва калі яго вялікі файл, як вы чытаеце яго цалкам у памяць. Хочаце ведаць, лепшы спосаб, чым задаць пытанне, я мог бы адказаць на лепшы метад.
дададзена аўтар Saransh Mohapatra, крыніца
Ці разумееце вы, як MD5 генеруецца ... глядзіце на вясёлкавых табліц для прыкладаў рэчаў, якія маюць аднолькавую кантрольную суму, але адрозніваюцца: P
дададзена аўтар Joran Beasley, крыніца
няма ... няма ніякага спосабу, каб гарантаваць аднастайнасць акрамя праверкі пабайтная ... няма ніякага цэтліка ... гэта вельмі малаверагодна, каб сутыкнуцца, але ён усё яшчэ мог ...
дададзена аўтар Joran Beasley, крыніца
@abhishekgarg: Я абнавіў свой адказ, каб паказаць, як хэш файла, не чытаючы ўсё гэта ў памяці.
дададзена аўтар abarnert, крыніца
калі змесціва файла такое ж, то лагічна яны з'яўляюцца дублікатамі, што азначае, што яны будуць ствараць такую ​​ж суму.
дададзена аўтар abhishekgarg, крыніца
ніколі не здаралася са мной, хоць ..
дададзена аўтар abhishekgarg, крыніца
@SaranshMohapatra, калі ласка, скажыце мне лепшы спосаб :), ім заўсёды адчыненыя, каб даведацца, я толькі пачаў.
дададзена аўтар abhishekgarg, крыніца
@abarnert: дзякуй
дададзена аўтар abhishekgarg, крыніца