ഹാഷിംഗ് ആശയം. ക്രിപ്റ്റോഗ്രാഫിക് ഹാഷ് ഫംഗ്ഷൻ

ഇത്യാദി.). ഒന്നോ അല്ലെങ്കിൽ മറ്റൊരു ഹാഷ് ഫംഗ്ഷന്റെ തിരഞ്ഞെടുപ്പ് നിർണ്ണയിക്കുന്നത് പരിഹരിക്കപ്പെടുന്ന പ്രശ്നത്തിന്റെ പ്രത്യേകതകളാണ്. ഹാഷ് ഫംഗ്‌ഷനുകളുടെ ഏറ്റവും ലളിതമായ ഉദാഹരണങ്ങൾ ചെക്ക്‌സം അല്ലെങ്കിൽ CRC ആണ്.

പൊതുവേ, ഉറവിട ഡാറ്റയും ഹാഷ് കോഡും തമ്മിൽ പരസ്പരം കത്തിടപാടുകൾ ഇല്ല. അതിനാൽ, ഒരേ ഹാഷ് കോഡുകൾ നൽകുന്ന നിരവധി ഡാറ്റാ സെറ്റുകൾ ഉണ്ട് - കൂട്ടിയിടികൾ എന്ന് വിളിക്കപ്പെടുന്നവ. ഹാഷ് ഫംഗ്ഷനുകളുടെ "ഗുണനിലവാരം" വിലയിരുത്തുന്നതിൽ കൂട്ടിയിടികളുടെ സംഭാവ്യത ഒരു പ്രധാന പങ്ക് വഹിക്കുന്നു.

ചെക്ക്സംസ്

ഹാർഡ്‌വെയർ പിശകുകൾ ഉൾപ്പെടെയുള്ള ബോധപൂർവമല്ലാത്ത വികലങ്ങളിൽ നിന്ന് പരിരക്ഷിക്കാൻ ഉപയോഗിക്കുന്ന ഹാർഡ്‌വെയർ അൽഗോരിതങ്ങളിൽ സങ്കീർണ്ണമല്ലാത്തതും വളരെ വേഗതയുള്ളതും എളുപ്പത്തിൽ നടപ്പിലാക്കിയതുമാണ്.

കണക്കുകൂട്ടൽ വേഗത ക്രിപ്‌റ്റോഗ്രാഫിക് ഹാഷ് ഫംഗ്‌ഷനുകളേക്കാൾ പതിനായിരക്കണക്കിന് മടങ്ങ് വേഗതയുള്ളതും ഹാർഡ്‌വെയർ നടപ്പിലാക്കുന്നതിൽ വളരെ ലളിതവുമാണ്.

അത്തരമൊരു ഉയർന്ന വേഗതയ്ക്കുള്ള വില ക്രിപ്റ്റോഗ്രാഫിക് ശക്തിയുടെ അഭാവമാണ് - മുൻകൂട്ടി അറിയാവുന്ന തുകയിലേക്ക് സന്ദേശം ക്രമീകരിക്കാനുള്ള എളുപ്പമുള്ള അവസരം. കൂടാതെ, ചെക്ക്‌സം (സാധാരണ: 32 ബിറ്റുകൾ) സാധാരണയായി ക്രിപ്‌റ്റോഗ്രാഫിക് ഹാഷുകളേക്കാൾ വീതി കുറവാണ് (സാധാരണ: 128, 160, 256 ബിറ്റുകൾ), അതായത് മനഃപൂർവമല്ലാത്ത കൂട്ടിയിടികൾ സംഭവിക്കാം.

ഒരു സന്ദേശത്തെ 32- അല്ലെങ്കിൽ 16-ബിറ്റ് വാക്കുകളായി വിഭജിച്ച് അവയെ സംഗ്രഹിക്കുക എന്നതാണ് അത്തരമൊരു അൽഗോരിതത്തിന്റെ ഏറ്റവും ലളിതമായ കേസ്, ഉദാഹരണത്തിന്, TCP/IP-ൽ ഇത് ഉപയോഗിക്കുന്നു.

ഒരു ചട്ടം പോലെ, ഒരു നിശ്ചിത ദൈർഘ്യത്തിലേക്ക് തുടർച്ചയായി നിരവധി തെറ്റായ ബിറ്റുകൾ പോലെയുള്ള സാധാരണ ഹാർഡ്‌വെയർ പിശകുകൾ ട്രാക്കുചെയ്യുന്നതിന് അത്തരമൊരു അൽഗോരിതം ആവശ്യമാണ്. അൽഗോരിതങ്ങളുടെ കുടുംബം എന്ന് വിളിക്കപ്പെടുന്നവ "സൈക്ലിക് റിഡൻഡൻസി കോഡ്" ഈ ആവശ്യകതകൾ നിറവേറ്റുന്നു. ഉദാഹരണത്തിന്, ZIP ഉപകരണങ്ങളിൽ ഉപയോഗിക്കുന്ന CRC32 ഇതിൽ ഉൾപ്പെടുന്നു.

ക്രിപ്റ്റോഗ്രാഫിക് ഹാഷ് ഫംഗ്ഷനുകൾ

നിലവിലുള്ള നിരവധി ഹാഷ് ഫംഗ്‌ഷനുകളിൽ, ക്രിപ്‌റ്റോഗ്രഫിയിൽ ഉപയോഗിക്കുന്ന ക്രിപ്‌റ്റോഗ്രാഫിക്കായി ശക്തമായ ഹാഷ് ഫംഗ്‌ഷനുകൾ വേർതിരിച്ചറിയുന്നത് പതിവാണ്. ഒരു ക്രിപ്‌റ്റോ-റെസിസ്റ്റന്റ് ഹാഷ് ഫംഗ്‌ഷൻ ആദ്യം ഉണ്ടായിരിക്കണം കൂട്ടിയിടി പ്രതിരോധംരണ്ട് തരം:

ഹാഷിംഗ് ഉപയോഗിക്കുന്നു

ചില ഡാറ്റാ ഘടനകളിലും ഹാഷ് ഫംഗ്ഷനുകൾ ഉപയോഗിക്കുന്നു - ഹാഷ് ടേബിളുകൾ, കാർട്ടീഷ്യൻ മരങ്ങൾ. ഈ കേസിൽ ഹാഷ് ഫംഗ്ഷന്റെ ആവശ്യകതകൾ വ്യത്യസ്തമാണ്:

  • നല്ല ഡാറ്റ മിക്സബിലിറ്റി
  • വേഗത്തിലുള്ള കണക്കുകൂട്ടൽ അൽഗോരിതം

ഡാറ്റ അനുരഞ്ജനം

പൊതുവേ, ഒറിജിനൽ ഉപയോഗിക്കാതെ ചില വിവരങ്ങൾ ഒറിജിനലുമായി സാമ്യമുള്ളതായിരിക്കാൻ പരിശോധിക്കുന്നതായി ഈ ആപ്ലിക്കേഷനെ വിവരിക്കാം. അനുരഞ്ജനത്തിനായി, പരിശോധിച്ചുറപ്പിക്കുന്ന വിവരങ്ങളുടെ ഹാഷ് മൂല്യം ഉപയോഗിക്കുന്നു. ഈ ആപ്ലിക്കേഷന്റെ രണ്ട് പ്രധാന മേഖലകളുണ്ട്:

പിശകുകൾക്കായി പരിശോധിക്കുന്നു

ഉദാഹരണത്തിന്, പ്രധാന വാചകത്തിനൊപ്പം ആശയവിനിമയ ചാനലിലൂടെ ചെക്ക്സം കൈമാറ്റം ചെയ്യപ്പെടാം. സ്വീകരിക്കുന്ന അവസാനത്തിൽ, ചെക്ക്സം വീണ്ടും കണക്കാക്കുകയും ട്രാൻസ്മിറ്റ് ചെയ്ത മൂല്യവുമായി താരതമ്യം ചെയ്യുകയും ചെയ്യാം. ഒരു പൊരുത്തക്കേട് കണ്ടെത്തിയാൽ, ട്രാൻസ്മിഷൻ സമയത്ത് വികലത സംഭവിച്ചുവെന്നും ഒരു ആവർത്തനം അഭ്യർത്ഥിക്കാമെന്നും ഇതിനർത്ഥം.

ഈ കേസിൽ ഹാഷിംഗിന്റെ ഒരു ഗാർഹിക അനലോഗ്, നീങ്ങുമ്പോൾ, ലഗേജുകളുടെ എണ്ണം മെമ്മറിയിൽ സൂക്ഷിക്കുമ്പോൾ സാങ്കേതികതയായിരിക്കാം. തുടർന്ന്, പരിശോധിക്കാൻ, ഓരോ സ്യൂട്ട്കേസിനെക്കുറിച്ച് നിങ്ങൾ ഓർമ്മിക്കേണ്ടതില്ല, പക്ഷേ അവ എണ്ണുക. ഒരു പൊരുത്തം അർത്ഥമാക്കുന്നത് ഒരു സ്യൂട്ട്കേസും നഷ്ടപ്പെട്ടിട്ടില്ല എന്നാണ്. അതായത്, ലഗേജുകളുടെ എണ്ണം അതിന്റെ ഹാഷ് കോഡാണ്.

പാസ്ഫ്രെയ്സ് പരിശോധന

മിക്ക കേസുകളിലും, പാസ്‌ഫ്രെയ്‌സുകൾ ടാർഗെറ്റുകളിൽ സംഭരിക്കുന്നില്ല, അവയുടെ ഹാഷ് മൂല്യങ്ങൾ മാത്രമേ സംഭരിച്ചിട്ടുള്ളൂ. പാസ്‌ഫ്രെയ്‌സുകൾ സംഭരിക്കുന്നത് അഭികാമ്യമല്ല, കാരണം വാക്യങ്ങളുള്ള ഒരു ഫയലിലേക്ക് അനധികൃത ആക്‌സസ് ഉണ്ടായാൽ, ആക്രമണകാരി എല്ലാ പാസ്‌ഫ്രെയ്‌സുകളും കണ്ടെത്തുകയും അവ ഉടനടി ഉപയോഗിക്കുകയും ചെയ്യും, കൂടാതെ ഹാഷ് മൂല്യങ്ങൾ സംഭരിക്കുമ്പോൾ, അവൻ ഹാഷ് മൂല്യങ്ങൾ മാത്രമേ പഠിക്കൂ. യഥാർത്ഥ ഡാറ്റയിലേക്ക് പഴയപടിയാക്കാൻ കഴിയാത്തവ, ഈ സാഹചര്യത്തിൽ, പാസ്ഫ്രെയ്സ്. പ്രാമാണീകരണ പ്രക്രിയയിൽ, നൽകിയ പാസ്‌ഫ്രെയ്‌സിന്റെ ഹാഷ് മൂല്യം കണക്കാക്കുകയും സംരക്ഷിച്ച ഒന്നുമായി താരതമ്യം ചെയ്യുകയും ചെയ്യുന്നു.

ഈ സാഹചര്യത്തിൽ ഒരു ഉദാഹരണം ഗ്നു/ലിനക്സും മൈക്രോസോഫ്റ്റ് വിൻഡോസ് എക്സ്പിയും ആയിരിക്കും. ഉപയോക്തൃ അക്കൗണ്ടുകളിൽ നിന്ന് പാസ്‌ഫ്രെയ്‌സുകളുടെ ഹാഷ് മൂല്യങ്ങൾ മാത്രമാണ് അവർ സംഭരിക്കുന്നത്.

ഡാറ്റ വീണ്ടെടുക്കൽ വേഗത്തിലാക്കുക

ഉദാഹരണത്തിന്, ടെക്സ്റ്റ് ഫീൽഡുകൾ ഒരു ഡാറ്റാബേസിലേക്ക് എഴുതുമ്പോൾ, അവയുടെ ഹാഷ് കോഡ് കണക്കാക്കുകയും ഡാറ്റ ആ ഹാഷ് കോഡിന് അനുയോജ്യമായ ഒരു വിഭാഗത്തിൽ സ്ഥാപിക്കുകയും ചെയ്യാം. തുടർന്ന്, ഡാറ്റയ്‌ക്കായി തിരയുമ്പോൾ, നിങ്ങൾ ആദ്യം ടെക്‌സ്‌റ്റിന്റെ ഹാഷ് കോഡ് കണക്കാക്കേണ്ടതുണ്ട്, ഏത് വിഭാഗത്തിലാണ് നിങ്ങൾ അത് തിരയേണ്ടതെന്ന് നിങ്ങൾക്ക് ഉടനടി അറിയാം, അതായത്, നിങ്ങൾ മുഴുവൻ ഡാറ്റാബേസിലും തിരയേണ്ടതില്ല, പക്ഷേ മാത്രം അതിന്റെ ഒരു വിഭാഗത്തിൽ (ഇത് തിരയലിനെ വളരെയധികം വേഗത്തിലാക്കുന്നു).

ഈ സാഹചര്യത്തിൽ ഹാഷിംഗിന്റെ ഒരു സാധാരണ അനലോഗ് അക്ഷരമാലാക്രമത്തിൽ ഒരു നിഘണ്ടുവിൽ വാക്കുകൾ സ്ഥാപിക്കുന്നതാണ്. ഒരു വാക്കിന്റെ ആദ്യ അക്ഷരം അതിന്റെ ഹാഷ് കോഡാണ്, തിരയുമ്പോൾ, ഞങ്ങൾ നിഘണ്ടു മുഴുവൻ നോക്കുന്നില്ല, മറിച്ച് ആവശ്യമുള്ള അക്ഷരം മാത്രം.

അൽഗോരിതങ്ങളുടെ പട്ടിക

  • SHA-2 (SHA-224, SHA-256, SHA-384, SHA-512)
  • RIPEMD-160
  • RIPEMD-320
  • സ്നെഫ്രു
  • കടുവ (ചുഴി
  • IP ഇന്റർനെറ്റ് ചെക്ക്സം (RFC 1071)

ലിങ്കുകൾ

വിക്കിമീഡിയ ഫൗണ്ടേഷൻ. 2010.

മറ്റ് നിഘണ്ടുവുകളിൽ "ഹാഷ് ഫംഗ്ഷൻ" എന്താണെന്ന് കാണുക:

    ഹാഷ് ഫംഗ്ഷൻ- ഇൻപുട്ട് മൂല്യത്തിന്റെ വ്യത്യസ്‌ത വലുപ്പങ്ങൾ നൽകിയിരിക്കുന്ന ഒരു ഫംഗ്‌ഷൻ, ഒരു നിശ്ചിത വലുപ്പത്തിന്റെ ഔട്ട്‌പുട്ട് ഉള്ളതാണ്. ഹാഷ് ഫംഗ്ഷൻ - ഇൻഫർമേഷൻ ടെക്നോളജിയുടെ വിഷയങ്ങൾ... ... സാങ്കേതിക വിവർത്തകന്റെ ഗൈഡ്വിക്കിപീഡിയ

    അസോസിയേറ്റീവ് അറേ ഇന്റർഫേസ് നടപ്പിലാക്കുന്ന ഒരു ഡാറ്റാ ഘടനയാണ് ഹാഷ് ടേബിൾ, അതായത്, ജോഡികൾ (കീ, മൂല്യം) സംഭരിക്കാനും മൂന്ന് പ്രവർത്തനങ്ങൾ നടത്താനും ഇത് നിങ്ങളെ അനുവദിക്കുന്നു: ഒരു പുതിയ ജോഡി ചേർക്കുന്നതിനുള്ള പ്രവർത്തനം, തിരയൽ പ്രവർത്തനം, ഒരു ജോടി ഇല്ലാതാക്കുന്നതിനുള്ള പ്രവർത്തനം. by ... ... വിക്കിപീഡിയ

    ഒരു ഹാഷ് ഫംഗ്‌ഷൻ കൂട്ടിയിടി രണ്ട് വ്യത്യസ്ത ഇൻപുട്ട് ഡാറ്റ ബ്ലോക്കുകളാണ്, മിക്ക ഹാഷ് ഫംഗ്‌ഷനുകൾക്കും കൂട്ടിയിടികൾ നിലവിലുണ്ട്, എന്നാൽ “നല്ല” ഹാഷ് ഫംഗ്‌ഷനുകൾക്ക് അവയുടെ ആവൃത്തി സൈദ്ധാന്തിക മിനിമത്തിന് അടുത്താണ്. ചില പ്രത്യേക സന്ദർഭങ്ങളിൽ... വിക്കിപീഡിയ

    ഹാഷിംഗ് (ചിലപ്പോൾ ഹാഷിംഗ്) എന്നത് അനിയന്ത്രിതമായ ദൈർഘ്യമുള്ള ഒരു ഇൻപുട്ട് ഡാറ്റ അറേയെ ഒരു നിശ്ചിത ദൈർഘ്യമുള്ള ഔട്ട്പുട്ട് ബിറ്റ് സ്ട്രിംഗായി മാറ്റുന്നതാണ്. അത്തരം പരിവർത്തനങ്ങളെ ഹാഷ് ഫംഗ്‌ഷനുകൾ അല്ലെങ്കിൽ കൺവ്യൂഷൻ ഫംഗ്‌ഷനുകൾ എന്നും വിളിക്കുന്നു, അവയുടെ ഫലങ്ങൾ... ... വിക്കിപീഡിയ

    1995-ൽ റോസ് ആൻഡേഴ്സണും എലി ബെഹാമും ചേർന്ന് ടൈഗർ ഹാഷ് ഫംഗ്ഷൻ വികസിപ്പിച്ചെടുത്തു. 64-ബിറ്റ് കമ്പ്യൂട്ടറുകളിൽ പ്രത്യേകിച്ച് വേഗത്തിൽ പ്രവർത്തിക്കാനാണ് ടൈഗർ രൂപകൽപ്പന ചെയ്തിരിക്കുന്നത്. കടുവയ്ക്ക് പേറ്റന്റ് നിയന്ത്രണങ്ങളൊന്നുമില്ല, ഇത് ഉപയോഗിച്ച് സ്വതന്ത്രമായി ഉപയോഗിക്കാം... ... വിക്കിപീഡിയ

ഞാൻ വിശ്വസിക്കുന്നത് പോലെ, 2007 മുതൽ, US നാഷണൽ ഇൻസ്റ്റിറ്റ്യൂട്ട് ഓഫ് സ്റ്റാൻഡേർഡ്സ് ആൻഡ് ടെക്നോളജി (NIST) SHA-1 ന് പകരം ഒരു ഹാഷ് അൽഗോരിതം വികസിപ്പിച്ചെടുക്കാൻ ഒരു മത്സരം നടത്തുന്നുണ്ടെന്ന് പലർക്കും അറിയാം. എന്നിരുന്നാലും, ചില കാരണങ്ങളാൽ ഈ വിഷയം സൈറ്റിൽ അവഗണിക്കപ്പെട്ടു. ഇതാണ് യഥാർത്ഥത്തിൽ എന്നെ നിങ്ങളിലേക്ക് എത്തിച്ചത്. ഹാഷ് അൽഗോരിതങ്ങൾക്കായി നീക്കിവച്ചിരിക്കുന്ന ലേഖനങ്ങളുടെ ഒരു പരമ്പര ഞാൻ നിങ്ങളുടെ ശ്രദ്ധയിൽപ്പെടുത്തുന്നു. ഈ ശ്രേണിയിൽ, ഞങ്ങൾ ഒരുമിച്ച് ഹാഷ് ഫംഗ്‌ഷനുകളുടെ അടിസ്ഥാനകാര്യങ്ങൾ പഠിക്കും, ഏറ്റവും പ്രശസ്തമായ ഹാഷ് അൽ‌ഗോരിതങ്ങൾ പരിഗണിക്കും, SHA-3 മത്സരത്തിന്റെ അന്തരീക്ഷത്തിലേക്ക് വീഴുകയും അത് വിജയിക്കുമെന്ന് അവകാശപ്പെടുന്ന അൽ‌ഗോരിതങ്ങൾ പരിഗണിക്കുകയും ചെയ്യും, ഞങ്ങൾ തീർച്ചയായും അവ പരീക്ഷിക്കും. കൂടാതെ, സാധ്യമെങ്കിൽ, റഷ്യൻ ഹാഷിംഗ് മാനദണ്ഡങ്ങൾ പരിഗണിക്കും.

എന്നെക്കുറിച്ച്

വിവര സുരക്ഷാ വകുപ്പിലെ വിദ്യാർത്ഥി.

ഹാഷിംഗിനെക്കുറിച്ച്

ഇക്കാലത്ത്, ഹാഷിംഗ് ഉപയോഗിക്കാതെ ഏതാണ്ട് ഒരു ക്രിപ്റ്റോഗ്രഫി ആപ്ലിക്കേഷനും പൂർത്തിയാകില്ല.
സാധാരണയായി ബൈനറി അക്ഷരമാലയിൽ എഴുതുന്ന, കൺവ്യൂഷൻ എന്ന് വിളിക്കപ്പെടുന്ന നിശ്ചിത-ദൈർഘ്യമുള്ള ബിറ്റ് പാറ്റേണിലേക്ക് ഒരു അനിയന്ത്രിതമായ സന്ദേശമോ ഡാറ്റയുടെയോ "കംപ്രസ്സ്" ചെയ്യാൻ രൂപകൽപ്പന ചെയ്ത ഫംഗ്ഷനുകളാണ് ഹാഷ് ഫംഗ്ഷനുകൾ. സ്റ്റാറ്റിസ്റ്റിക്കൽ പരീക്ഷണങ്ങൾ നടത്തുമ്പോഴും ലോജിക്കൽ ഉപകരണങ്ങൾ പരീക്ഷിക്കുമ്പോഴും ദ്രുത തിരയലുകൾക്കായി അൽഗോരിതങ്ങൾ നിർമ്മിക്കുമ്പോഴും ഡാറ്റാബേസുകളിലെ റെക്കോർഡുകളുടെ സമഗ്രത പരിശോധിക്കുമ്പോഴും ഹാഷ് ഫംഗ്ഷനുകൾക്ക് വിവിധ ആപ്ലിക്കേഷനുകൾ ഉണ്ട്. ആർഗ്യുമെന്റ് മൂല്യങ്ങൾ ക്രമരഹിതമായി തിരഞ്ഞെടുക്കുമ്പോൾ അവയുടെ മൂല്യങ്ങളുടെ ഏകീകൃത വിതരണമാണ് ഹാഷ് ഫംഗ്ഷനുകളുടെ പ്രധാന ആവശ്യകത.
ക്രിപ്‌റ്റോഗ്രാഫിക് ഹാഷ് ഫംഗ്‌ഷൻ എന്നത് ക്രിപ്‌റ്റോഗ്രാഫിക് സ്ഥിരതയുള്ള ഏതൊരു ഹാഷ് ഫംഗ്‌ഷനാണ്, അതായത്, ക്രിപ്‌റ്റോഗ്രാഫിക് ആപ്ലിക്കേഷനുകൾക്ക് പ്രത്യേകമായ നിരവധി ആവശ്യകതകൾ ഇത് നിറവേറ്റുന്നു. ക്രിപ്റ്റോഗ്രഫിയിൽ, ഇനിപ്പറയുന്ന പ്രശ്നങ്ങൾ പരിഹരിക്കാൻ ഹാഷ് ഫംഗ്ഷനുകൾ ഉപയോഗിക്കുന്നു:
- അവയുടെ പ്രക്ഷേപണത്തിലോ സംഭരണത്തിലോ ഡാറ്റാ ഇന്റഗ്രിറ്റി മോണിറ്ററിംഗ് സിസ്റ്റങ്ങൾ നിർമ്മിക്കുക,
- ഡാറ്റ ഉറവിട പ്രാമാണീകരണം.

ഏതൊരു പ്രവർത്തനത്തെയും ഹാഷ് ഫംഗ്ഷൻ എന്ന് വിളിക്കുന്നു h:X -> Y, എളുപ്പത്തിൽ കണക്കാക്കാവുന്നതും അതുപോലെ ഏത് സന്ദേശത്തിനും എംഅർത്ഥം h(M) = H (കോൺവല്യൂഷൻ)ഒരു നിശ്ചിത ബിറ്റ് നീളമുണ്ട്. എക്സ്- എല്ലാ സന്ദേശങ്ങളുടെയും കൂട്ടം, വൈ- നിശ്ചിത ദൈർഘ്യമുള്ള ബൈനറി വെക്റ്ററുകളുടെ ഒരു കൂട്ടം.

ചട്ടം പോലെ, ഒറ്റ-ഘട്ട കംപ്രഷൻ ഫംഗ്ഷനുകൾ എന്ന് വിളിക്കപ്പെടുന്നതിന്റെ അടിസ്ഥാനത്തിലാണ് ഹാഷ് ഫംഗ്ഷനുകൾ നിർമ്മിച്ചിരിക്കുന്നത്. y = f(x 1 , x 2)രണ്ട് വേരിയബിളുകൾ, എവിടെ x 1, x 2ഒപ്പം വൈ- നീളമുള്ള ബൈനറി വെക്റ്ററുകൾ എം, എൻഒപ്പം എൻഅതനുസരിച്ച്, ഒപ്പം എൻകൺവല്യൂഷന്റെ ദൈർഘ്യമാണ്, ഒപ്പം എം- സന്ദേശം ബ്ലോക്ക് നീളം.
മൂല്യം ലഭിക്കാൻ h(M)സന്ദേശം ആദ്യം നീളമുള്ള ബ്ലോക്കുകളായി തിരിച്ചിരിക്കുന്നു എം(അതേ സമയം, സന്ദേശ ദൈർഘ്യം ഒന്നിലധികം അല്ലെങ്കിൽ എംഅവസാന ബ്ലോക്ക് പൂർത്തിയാകുന്നതുവരെ ചില പ്രത്യേക രീതിയിൽ സപ്ലിമെന്റ് ചെയ്യുന്നു), തുടർന്ന് തത്ഫലമായുണ്ടാകുന്ന ബ്ലോക്കുകളിലേക്ക് എം 1, എം 2,.., എം എൻകൺവ്യൂഷൻ കണക്കാക്കുന്നതിന് ഇനിപ്പറയുന്ന തുടർച്ചയായ നടപടിക്രമം പ്രയോഗിക്കുക:

H o = v,
H i = f(M i ,H i-1), i = 1,.., N,
h(M) = H N

ഇവിടെ വി- ചില സ്ഥിരമായ, പലപ്പോഴും ഇനീഷ്യലൈസിംഗ് വെക്റ്റർ എന്ന് വിളിക്കുന്നു. അവൾ പുറത്തിറങ്ങുന്നു
വിവിധ കാരണങ്ങളാൽ, ഒരു രഹസ്യ സ്ഥിരാങ്കമോ റാൻഡം ഡാറ്റയുടെ ഒരു കൂട്ടമോ ആകാം (ഉദാഹരണത്തിന്, തീയതിയുടെയും സമയത്തിന്റെയും ഒരു മാതൃക).
ഈ സമീപനം ഉപയോഗിച്ച്, ഹാഷ് ഫംഗ്ഷന്റെ ഗുണവിശേഷതകൾ പൂർണ്ണമായും നിർണ്ണയിക്കുന്നത് ഒരു-ഘട്ട കംപ്രഷൻ ഫംഗ്ഷന്റെ സവിശേഷതകളാണ്.

രണ്ട് പ്രധാന തരത്തിലുള്ള ക്രിപ്റ്റോഗ്രാഫിക് ഹാഷ് ഫംഗ്ഷനുകളുണ്ട് - കീ, കീലെസ്സ്. പ്രധാന ഹാഷ് ഫംഗ്ഷനുകളെ സന്ദേശ പ്രാമാണീകരണ കോഡുകൾ എന്ന് വിളിക്കുന്നു. പരസ്‌പരം വിശ്വസിക്കുന്ന ഉപയോക്താക്കളുള്ള സിസ്റ്റങ്ങളിലെ ഡാറ്റാ ഉറവിടത്തിന്റെ കൃത്യതയും ഡാറ്റയുടെ സമഗ്രതയും ഉറപ്പുനൽകുന്നത് അധിക മാർഗങ്ങളില്ലാതെ അവ സാധ്യമാക്കുന്നു.
കീലെസ്സ് ഹാഷ് ഫംഗ്ഷനുകളെ പിശക് കണ്ടെത്തൽ കോഡുകൾ എന്ന് വിളിക്കുന്നു. അധിക മാർഗങ്ങൾ (ഉദാഹരണത്തിന്, എൻക്രിപ്ഷൻ) ഉപയോഗിച്ച് ഡാറ്റ സമഗ്രത ഉറപ്പുനൽകുന്നത് അവർ സാധ്യമാക്കുന്നു. ഈ ഹാഷ് ഫംഗ്ഷനുകൾ വിശ്വസനീയവും അവിശ്വസനീയവുമായ ഉപയോക്താക്കളുള്ള സിസ്റ്റങ്ങളിൽ ഉപയോഗിക്കാൻ കഴിയും.

സ്റ്റാറ്റിസ്റ്റിക്കൽ പ്രോപ്പർട്ടികൾ, ആവശ്യകതകൾ എന്നിവയെക്കുറിച്ച്

ഞാൻ ഇതിനകം പറഞ്ഞതുപോലെ, ഹാഷ് ഫംഗ്ഷനുകളുടെ പ്രധാന ആവശ്യകത ആർഗ്യുമെന്റ് മൂല്യങ്ങൾ ക്രമരഹിതമായി തിരഞ്ഞെടുക്കുമ്പോൾ അവയുടെ മൂല്യങ്ങളുടെ ഏകീകൃത വിതരണമാണ്. ക്രിപ്‌റ്റോഗ്രാഫിക് ഹാഷ് ഫംഗ്‌ഷനുകൾക്ക്, ആർഗ്യുമെന്റിലെ ചെറിയ മാറ്റത്തോടെ, ഫംഗ്‌ഷന്റെ മൂല്യം വളരെയധികം മാറുന്നു എന്നതും പ്രധാനമാണ്. ഇതിനെ അവലാഞ്ച് പ്രഭാവം എന്ന് വിളിക്കുന്നു.

പ്രധാന ഹാഷിംഗ് ഫംഗ്‌ഷനുകൾക്ക് ഇനിപ്പറയുന്ന ആവശ്യകതകൾ ഉണ്ട്:
- നിർമ്മാണത്തിന്റെ അസാധ്യത,
- പരിഷ്ക്കരണത്തിന്റെ അസാധ്യത.

ആദ്യത്തെ ആവശ്യകത അർത്ഥമാക്കുന്നത് ശരിയായ തകർച്ച മൂല്യമുള്ള ഒരു സന്ദേശം കണ്ടെത്തുന്നത് വളരെ ബുദ്ധിമുട്ടാണ് എന്നാണ്. രണ്ടാമത്തേത്, അറിയപ്പെടുന്ന കൺവ്യൂഷൻ മൂല്യമുള്ള ഒരു സന്ദേശത്തിനായി, ശരിയായ കൺവ്യൂഷൻ മൂല്യമുള്ള മറ്റൊരു സന്ദേശം തിരഞ്ഞെടുക്കുന്നതിലെ ഉയർന്ന സങ്കീർണ്ണതയാണ്.

കീലെസ്സ് ഫംഗ്‌ഷനുകൾക്കുള്ള ആവശ്യകതകൾ ഇവയാണ്:
- ഏകദിശ,
- കൂട്ടിയിടി പ്രതിരോധം,
- രണ്ടാമത്തെ മുൻചിത്രം കണ്ടെത്തുന്നതിനുള്ള പ്രതിരോധം.

തന്നിരിക്കുന്ന കൺവല്യൂഷൻ മൂല്യത്തെ അടിസ്ഥാനമാക്കി ഒരു സന്ദേശം കണ്ടെത്തുന്നതിനുള്ള ഉയർന്ന ബുദ്ധിമുട്ടാണ് ഏകദിശ സൂചിപ്പിക്കുന്നു. തെളിയിക്കപ്പെട്ട വൺ-വേനസ് ഉപയോഗിച്ച് നിലവിൽ ഹാഷ് ഫംഗ്ഷനുകളൊന്നും ഉപയോഗത്തിലില്ല എന്നത് ശ്രദ്ധിക്കേണ്ടതാണ്.
ഒരേ കൺവ്യൂഷൻ മൂല്യങ്ങളുള്ള ഒരു ജോടി സന്ദേശങ്ങൾ കണ്ടെത്തുന്നതിനുള്ള ബുദ്ധിമുട്ടാണ് കൂട്ടിയിടി പ്രതിരോധം. സാധാരണഗതിയിൽ, ക്രിപ്‌റ്റനലിസ്റ്റുകൾ കൂട്ടിയിടിക്കുന്നതിനുള്ള ഒരു മാർഗം കണ്ടെത്തുന്നതാണ് അൽഗോരിതം കാലഹരണപ്പെട്ടുകൊണ്ടിരിക്കുന്നുവെന്നും അത് വേഗത്തിൽ മാറ്റിസ്ഥാപിക്കേണ്ടതുണ്ടെന്നുമുള്ള ആദ്യ സൂചനയായി വർത്തിക്കുന്നു.
അറിയപ്പെടുന്ന കൺവ്യൂഷൻ മൂല്യമുള്ള തന്നിരിക്കുന്ന സന്ദേശത്തിന് അതേ കൺവ്യൂഷൻ മൂല്യമുള്ള രണ്ടാമത്തെ സന്ദേശം കണ്ടെത്തുന്നതിനുള്ള ബുദ്ധിമുട്ടാണ് രണ്ടാമത്തെ മുൻചിത്രം കണ്ടെത്തുന്നതിനുള്ള പ്രതിരോധം.

ഇത് സൈദ്ധാന്തിക ഭാഗമായിരുന്നു, അത് ഭാവിയിൽ നമുക്ക് ഉപയോഗപ്രദമാകും...

ജനപ്രിയ ഹാഷ് അൽഗോരിതങ്ങളെക്കുറിച്ച്

അൽഗോരിതങ്ങൾ CRC16/32- ചെക്ക്സം (ക്രിപ്റ്റോഗ്രാഫിക് പരിവർത്തനമല്ല).

അൽഗോരിതങ്ങൾ MD2/4/5/6. RSA അൽഗോരിതത്തിന്റെ രചയിതാക്കളിൽ ഒരാളായ റോൺ റിവസ്റ്റിന്റെ സൃഷ്ടിയാണ് അവ.
MD5 അൽഗോരിതം ഒരിക്കൽ വളരെ ജനപ്രിയമായിരുന്നു, എന്നാൽ ഹാക്കിംഗിനുള്ള ആദ്യ മുൻവ്യവസ്ഥകൾ തൊണ്ണൂറുകളുടെ അവസാനത്തിൽ പ്രത്യക്ഷപ്പെട്ടു, ഇപ്പോൾ അതിന്റെ ജനപ്രീതി അതിവേഗം കുറയുന്നു.
MD6 അൽഗോരിതം ഡിസൈൻ കാഴ്ചപ്പാടിൽ നിന്ന് വളരെ രസകരമായ ഒരു അൽഗോരിതം ആണ്. ഇത് SHA-3 മത്സരത്തിനായി നാമനിർദ്ദേശം ചെയ്യപ്പെട്ടു, പക്ഷേ, നിർഭാഗ്യവശാൽ, രചയിതാക്കൾക്ക് ഇത് നിലവാരത്തിലേക്ക് കൊണ്ടുവരാൻ സമയമില്ല, കൂടാതെ ഈ അൽഗോരിതം രണ്ടാം റൗണ്ടിൽ എത്തിയ സ്ഥാനാർത്ഥികളുടെ പട്ടികയിൽ ഇല്ല.

ഭരണാധികാരി അൽഗോരിതങ്ങൾ SHAഇന്ന് വ്യാപകമായി ഉപയോഗിക്കുന്ന അൽഗോരിതങ്ങൾ. SHA-1-ൽ നിന്ന് SHA-2 പതിപ്പ് സ്റ്റാൻഡേർഡുകളിലേക്കുള്ള ഒരു സജീവ പരിവർത്തനം ഉണ്ട്. SHA224, SHA256, SHA384, SHA512 അൽഗോരിതങ്ങളുടെ കൂട്ടായ പേരാണ് SHA-2. SHA224, SHA384 എന്നിവ യഥാക്രമം SHA256, SHA512 എന്നിവയുടെ അനലോഗ് ആണ്, കൺവല്യൂഷൻ കണക്കാക്കിയ ശേഷം മാത്രമേ അതിലെ ചില വിവരങ്ങൾ തള്ളിക്കളയുകയുള്ളൂ. പഴയ മോഡലുകളുടെ ഉപകരണങ്ങളുമായി അനുയോജ്യത ഉറപ്പാക്കാൻ മാത്രമേ അവ ഉപയോഗിക്കാവൂ.

റഷ്യൻ സ്റ്റാൻഡേർഡ് - GOST 34.11-94.

അടുത്ത ലേഖനത്തിൽ

MD അൽഗോരിതങ്ങളുടെ അവലോകനം (MD4, MD5, MD6).

സാഹിത്യം

A. P. അൽഫെറോവ്, ക്രിപ്റ്റോഗ്രഫിയുടെ അടിസ്ഥാനങ്ങൾ.

ബ്രൂസ് ഷ്നിയർ, അപ്ലൈഡ് ക്രിപ്റ്റോഗ്രഫി.

അവൻ തന്നെ ഹാഷ് "ഹാഷ് ഫംഗ്ഷൻ"



, അല്ലെങ്കിൽ ഹാഷ്, ഇതാണ് ഇംഗ്ലീഷ് പദമായ ഹാഷ്, റഷ്യൻ ഭാഷയിൽ മിക്കപ്പോഴും സംയുക്ത പദങ്ങളിൽ ഉപയോഗിക്കുന്നു "ഹാഷ് ഫംഗ്ഷൻ", "ഹാഷ് സം" അല്ലെങ്കിൽ "ഹാഷ് അൽഗോരിതം". അത് എന്താണെന്നും എന്തുകൊണ്ട് അത് ആവശ്യമാണെന്നും മനസിലാക്കാൻ ശ്രമിക്കാം.

ഹാഷിംഗ് എന്നത് അനിയന്ത്രിതമായ ദൈർഘ്യമുള്ള ഇൻപുട്ട് ഡാറ്റയെ അടിസ്ഥാനമാക്കിയുള്ള നിശ്ചിത-ദൈർഘ്യമുള്ള പ്രതീകങ്ങളുടെ ഒരു കൂട്ടം നിർണ്ണയിക്കുന്ന (വ്യക്തമല്ലാത്തതും കൃത്യമായി അറിയപ്പെടുന്നതുമായ) കണക്കുകൂട്ടലിനെ സൂചിപ്പിക്കുന്നു. ഈ സാഹചര്യത്തിൽ, ഉറവിട ഡാറ്റയിലെ ഒരു പ്രതീകമെങ്കിലും മാറ്റുന്നത് (100% ന് അടുത്ത പ്രോബബിലിറ്റിയോടെ) ഫലമായുണ്ടാകുന്ന ഫിക്സഡ് സ്ട്രിംഗ് വ്യത്യസ്തമായിരിക്കും. ഒരു വലിയ കൂട്ടം ഡാറ്റയിൽ നിന്ന് "വിരലടയാളം എടുക്കൽ" ആണ് ഹാഷിംഗ് എന്ന് നമുക്ക് പറയാം.

ഇതെല്ലാം എന്തിനുവേണ്ടിയാണ്? നമുക്ക് ഒരു ഉദാഹരണം നോക്കാം: നിങ്ങൾ ഒരു വലിയ ഫയൽ ഡൗൺലോഡ് ചെയ്തു (ഒരു zip ആർക്കൈവ് എന്ന് പറയാം) അതിൽ പിശകുകളൊന്നും ഇല്ലെന്ന് ഉറപ്പാക്കാൻ ആഗ്രഹിക്കുന്നു. നിങ്ങൾക്ക് ഈ ഫയലിന്റെ "ഹാഷ് തുക" (അതേ വിരലടയാളം) കണ്ടെത്താനും സൈറ്റിൽ പ്രസിദ്ധീകരിച്ചവയുമായി താരതമ്യം ചെയ്യാനും കഴിയും. ഹാഷ് സം സ്ട്രിംഗുകൾ വ്യത്യസ്തമാണെങ്കിൽ, ഫയൽ തീർച്ചയായും "തകർന്നതാണ്".

മറ്റൊരു ഉദാഹരണം: ഉപയോക്താക്കളുടെ ഡാറ്റ പരിരക്ഷിക്കുന്നതിന്, ബാങ്ക് അവരുടെ ഡാറ്റാബേസിൽ അവരുടെ പാസ്‌വേഡുകൾ സൂക്ഷിക്കരുത്. പകരം, ബാങ്ക് ഈ പാസ്‌വേഡുകളുടെ ഹാഷ് തുകകൾ സംഭരിക്കുന്നു, ഓരോ തവണയും ഒരു പാസ്‌വേഡ് നൽകുമ്പോൾ, അത് അതിന്റെ ഹാഷ് സം കണക്കാക്കുകയും ഡാറ്റാബേസിൽ സംഭരിച്ചിരിക്കുന്നതുമായി താരതമ്യം ചെയ്യുകയും ചെയ്യുന്നു. സാധ്യമായ "കൂട്ടിമുട്ടലുകൾ" എന്നതിനെക്കുറിച്ച് ഇവിടെ ന്യായമായ ഒരു ചോദ്യം ഉയർന്നുവരുന്നു, അതായത്, വ്യത്യസ്ത പാസ്‌വേഡുകൾ ഹാഷുചെയ്യുന്നതിന്റെ അതേ ഫലങ്ങൾ. ഒരു നല്ല ഹാഷ് ഫംഗ്‌ഷൻ കൂട്ടിയിടികളെ ഒരു മിനിമം ആയി കുറയ്ക്കണം, ഇത് ചെയ്യുന്നതിന് അത് വളരെ സങ്കീർണ്ണവും വളഞ്ഞതുമായിരിക്കണം.


പട്ടികയിൽ ഉണ്ട്.

ഇത്യാദി.). ഒന്നോ അല്ലെങ്കിൽ മറ്റൊരു ഹാഷ് ഫംഗ്ഷന്റെ തിരഞ്ഞെടുപ്പ് നിർണ്ണയിക്കുന്നത് പരിഹരിക്കപ്പെടുന്ന പ്രശ്നത്തിന്റെ പ്രത്യേകതകളാണ്. ഹാഷ് ഫംഗ്‌ഷനുകളുടെ ഏറ്റവും ലളിതമായ ഉദാഹരണങ്ങൾ ചെക്ക്‌സം അല്ലെങ്കിൽ CRC ആണ്.

പൊതുവേ, ഉറവിട ഡാറ്റയും ഹാഷ് കോഡും തമ്മിൽ പരസ്പരം കത്തിടപാടുകൾ ഇല്ല. അതിനാൽ, ഒരേ ഹാഷ് കോഡുകൾ നൽകുന്ന നിരവധി ഡാറ്റാ സെറ്റുകൾ ഉണ്ട് - കൂട്ടിയിടികൾ എന്ന് വിളിക്കപ്പെടുന്നവ. ഹാഷ് ഫംഗ്ഷനുകളുടെ "ഗുണനിലവാരം" വിലയിരുത്തുന്നതിൽ കൂട്ടിയിടികളുടെ സംഭാവ്യത ഒരു പ്രധാന പങ്ക് വഹിക്കുന്നു.

ചെക്ക്സംസ്

ഹാർഡ്‌വെയർ പിശകുകൾ ഉൾപ്പെടെയുള്ള ബോധപൂർവമല്ലാത്ത വികലങ്ങളിൽ നിന്ന് പരിരക്ഷിക്കാൻ ഉപയോഗിക്കുന്ന ഹാർഡ്‌വെയർ അൽഗോരിതങ്ങളിൽ സങ്കീർണ്ണമല്ലാത്തതും വളരെ വേഗതയുള്ളതും എളുപ്പത്തിൽ നടപ്പിലാക്കിയതുമാണ്.

കണക്കുകൂട്ടൽ വേഗത ക്രിപ്‌റ്റോഗ്രാഫിക് ഹാഷ് ഫംഗ്‌ഷനുകളേക്കാൾ പതിനായിരക്കണക്കിന് മടങ്ങ് വേഗതയുള്ളതും ഹാർഡ്‌വെയർ നടപ്പിലാക്കുന്നതിൽ വളരെ ലളിതവുമാണ്.

അത്തരമൊരു ഉയർന്ന വേഗതയ്ക്കുള്ള വില ക്രിപ്റ്റോഗ്രാഫിക് ശക്തിയുടെ അഭാവമാണ് - മുൻകൂട്ടി അറിയാവുന്ന തുകയിലേക്ക് സന്ദേശം ക്രമീകരിക്കാനുള്ള എളുപ്പമുള്ള അവസരം. കൂടാതെ, ചെക്ക്‌സം (സാധാരണ: 32 ബിറ്റുകൾ) സാധാരണയായി ക്രിപ്‌റ്റോഗ്രാഫിക് ഹാഷുകളേക്കാൾ വീതി കുറവാണ് (സാധാരണ: 128, 160, 256 ബിറ്റുകൾ), അതായത് മനഃപൂർവമല്ലാത്ത കൂട്ടിയിടികൾ സംഭവിക്കാം.

ഒരു സന്ദേശത്തെ 32- അല്ലെങ്കിൽ 16-ബിറ്റ് വാക്കുകളായി വിഭജിച്ച് അവയെ സംഗ്രഹിക്കുക എന്നതാണ് അത്തരമൊരു അൽഗോരിതത്തിന്റെ ഏറ്റവും ലളിതമായ കേസ്, ഉദാഹരണത്തിന്, TCP/IP-ൽ ഇത് ഉപയോഗിക്കുന്നു.

ഒരു ചട്ടം പോലെ, ഒരു നിശ്ചിത ദൈർഘ്യത്തിലേക്ക് തുടർച്ചയായി നിരവധി തെറ്റായ ബിറ്റുകൾ പോലെയുള്ള സാധാരണ ഹാർഡ്‌വെയർ പിശകുകൾ ട്രാക്കുചെയ്യുന്നതിന് അത്തരമൊരു അൽഗോരിതം ആവശ്യമാണ്. അൽഗോരിതങ്ങളുടെ കുടുംബം എന്ന് വിളിക്കപ്പെടുന്നവ "സൈക്ലിക് റിഡൻഡൻസി കോഡ്" ഈ ആവശ്യകതകൾ നിറവേറ്റുന്നു. ഉദാഹരണത്തിന്, ZIP ഉപകരണങ്ങളിൽ ഉപയോഗിക്കുന്ന CRC32 ഇതിൽ ഉൾപ്പെടുന്നു.

ക്രിപ്റ്റോഗ്രാഫിക് ഹാഷ് ഫംഗ്ഷനുകൾ

നിലവിലുള്ള നിരവധി ഹാഷ് ഫംഗ്‌ഷനുകളിൽ, ക്രിപ്‌റ്റോഗ്രഫിയിൽ ഉപയോഗിക്കുന്ന ക്രിപ്‌റ്റോഗ്രാഫിക്കായി ശക്തമായ ഹാഷ് ഫംഗ്‌ഷനുകൾ വേർതിരിച്ചറിയുന്നത് പതിവാണ്. ഒരു ക്രിപ്‌റ്റോ-റെസിസ്റ്റന്റ് ഹാഷ് ഫംഗ്‌ഷൻ ആദ്യം ഉണ്ടായിരിക്കണം കൂട്ടിയിടി പ്രതിരോധംരണ്ട് തരം:

ഹാഷിംഗ് ഉപയോഗിക്കുന്നു

ചില ഡാറ്റാ ഘടനകളിലും ഹാഷ് ഫംഗ്ഷനുകൾ ഉപയോഗിക്കുന്നു - ഹാഷ് ടേബിളുകൾ, കാർട്ടീഷ്യൻ മരങ്ങൾ. ഈ കേസിൽ ഹാഷ് ഫംഗ്ഷന്റെ ആവശ്യകതകൾ വ്യത്യസ്തമാണ്:

  • നല്ല ഡാറ്റ മിക്സബിലിറ്റി
  • വേഗത്തിലുള്ള കണക്കുകൂട്ടൽ അൽഗോരിതം

ഡാറ്റ അനുരഞ്ജനം

പൊതുവേ, ഒറിജിനൽ ഉപയോഗിക്കാതെ ചില വിവരങ്ങൾ ഒറിജിനലുമായി സാമ്യമുള്ളതായിരിക്കാൻ പരിശോധിക്കുന്നതായി ഈ ആപ്ലിക്കേഷനെ വിവരിക്കാം. അനുരഞ്ജനത്തിനായി, പരിശോധിച്ചുറപ്പിക്കുന്ന വിവരങ്ങളുടെ ഹാഷ് മൂല്യം ഉപയോഗിക്കുന്നു. ഈ ആപ്ലിക്കേഷന്റെ രണ്ട് പ്രധാന മേഖലകളുണ്ട്:

പിശകുകൾക്കായി പരിശോധിക്കുന്നു

ഉദാഹരണത്തിന്, പ്രധാന വാചകത്തിനൊപ്പം ആശയവിനിമയ ചാനലിലൂടെ ചെക്ക്സം കൈമാറ്റം ചെയ്യപ്പെടാം. സ്വീകരിക്കുന്ന അവസാനത്തിൽ, ചെക്ക്സം വീണ്ടും കണക്കാക്കുകയും ട്രാൻസ്മിറ്റ് ചെയ്ത മൂല്യവുമായി താരതമ്യം ചെയ്യുകയും ചെയ്യാം. ഒരു പൊരുത്തക്കേട് കണ്ടെത്തിയാൽ, ട്രാൻസ്മിഷൻ സമയത്ത് വികലത സംഭവിച്ചുവെന്നും ഒരു ആവർത്തനം അഭ്യർത്ഥിക്കാമെന്നും ഇതിനർത്ഥം.

ഈ കേസിൽ ഹാഷിംഗിന്റെ ഒരു ഗാർഹിക അനലോഗ്, നീങ്ങുമ്പോൾ, ലഗേജുകളുടെ എണ്ണം മെമ്മറിയിൽ സൂക്ഷിക്കുമ്പോൾ സാങ്കേതികതയായിരിക്കാം. തുടർന്ന്, പരിശോധിക്കാൻ, ഓരോ സ്യൂട്ട്കേസിനെക്കുറിച്ച് നിങ്ങൾ ഓർമ്മിക്കേണ്ടതില്ല, പക്ഷേ അവ എണ്ണുക. ഒരു പൊരുത്തം അർത്ഥമാക്കുന്നത് ഒരു സ്യൂട്ട്കേസും നഷ്ടപ്പെട്ടിട്ടില്ല എന്നാണ്. അതായത്, ലഗേജുകളുടെ എണ്ണം അതിന്റെ ഹാഷ് കോഡാണ്.

പാസ്ഫ്രെയ്സ് പരിശോധന

മിക്ക കേസുകളിലും, പാസ്‌ഫ്രെയ്‌സുകൾ ടാർഗെറ്റുകളിൽ സംഭരിക്കുന്നില്ല, അവയുടെ ഹാഷ് മൂല്യങ്ങൾ മാത്രമേ സംഭരിച്ചിട്ടുള്ളൂ. പാസ്‌ഫ്രെയ്‌സുകൾ സംഭരിക്കുന്നത് അഭികാമ്യമല്ല, കാരണം വാക്യങ്ങളുള്ള ഒരു ഫയലിലേക്ക് അനധികൃത ആക്‌സസ് ഉണ്ടായാൽ, ആക്രമണകാരി എല്ലാ പാസ്‌ഫ്രെയ്‌സുകളും കണ്ടെത്തുകയും അവ ഉടനടി ഉപയോഗിക്കുകയും ചെയ്യും, കൂടാതെ ഹാഷ് മൂല്യങ്ങൾ സംഭരിക്കുമ്പോൾ, അവൻ ഹാഷ് മൂല്യങ്ങൾ മാത്രമേ പഠിക്കൂ. യഥാർത്ഥ ഡാറ്റയിലേക്ക് പഴയപടിയാക്കാൻ കഴിയാത്തവ, ഈ സാഹചര്യത്തിൽ, പാസ്ഫ്രെയ്സ്. പ്രാമാണീകരണ പ്രക്രിയയിൽ, നൽകിയ പാസ്‌ഫ്രെയ്‌സിന്റെ ഹാഷ് മൂല്യം കണക്കാക്കുകയും സംരക്ഷിച്ച ഒന്നുമായി താരതമ്യം ചെയ്യുകയും ചെയ്യുന്നു.

ഈ സാഹചര്യത്തിൽ ഒരു ഉദാഹരണം ഗ്നു/ലിനക്സും മൈക്രോസോഫ്റ്റ് വിൻഡോസ് എക്സ്പിയും ആയിരിക്കും. ഉപയോക്തൃ അക്കൗണ്ടുകളിൽ നിന്ന് പാസ്‌ഫ്രെയ്‌സുകളുടെ ഹാഷ് മൂല്യങ്ങൾ മാത്രമാണ് അവർ സംഭരിക്കുന്നത്.

ഡാറ്റ വീണ്ടെടുക്കൽ വേഗത്തിലാക്കുക

ഉദാഹരണത്തിന്, ടെക്സ്റ്റ് ഫീൽഡുകൾ ഒരു ഡാറ്റാബേസിലേക്ക് എഴുതുമ്പോൾ, അവയുടെ ഹാഷ് കോഡ് കണക്കാക്കുകയും ഡാറ്റ ആ ഹാഷ് കോഡിന് അനുയോജ്യമായ ഒരു വിഭാഗത്തിൽ സ്ഥാപിക്കുകയും ചെയ്യാം. തുടർന്ന്, ഡാറ്റയ്‌ക്കായി തിരയുമ്പോൾ, നിങ്ങൾ ആദ്യം ടെക്‌സ്‌റ്റിന്റെ ഹാഷ് കോഡ് കണക്കാക്കേണ്ടതുണ്ട്, ഏത് വിഭാഗത്തിലാണ് നിങ്ങൾ അത് തിരയേണ്ടതെന്ന് നിങ്ങൾക്ക് ഉടനടി അറിയാം, അതായത്, നിങ്ങൾ മുഴുവൻ ഡാറ്റാബേസിലും തിരയേണ്ടതില്ല, പക്ഷേ മാത്രം അതിന്റെ ഒരു വിഭാഗത്തിൽ (ഇത് തിരയലിനെ വളരെയധികം വേഗത്തിലാക്കുന്നു).

ഈ സാഹചര്യത്തിൽ ഹാഷിംഗിന്റെ ഒരു സാധാരണ അനലോഗ് അക്ഷരമാലാക്രമത്തിൽ ഒരു നിഘണ്ടുവിൽ വാക്കുകൾ സ്ഥാപിക്കുന്നതാണ്. ഒരു വാക്കിന്റെ ആദ്യ അക്ഷരം അതിന്റെ ഹാഷ് കോഡാണ്, തിരയുമ്പോൾ, ഞങ്ങൾ നിഘണ്ടു മുഴുവൻ നോക്കുന്നില്ല, മറിച്ച് ആവശ്യമുള്ള അക്ഷരം മാത്രം.

അൽഗോരിതങ്ങളുടെ പട്ടിക

  • SHA-2 (SHA-224, SHA-256, SHA-384, SHA-512)
  • RIPEMD-160
  • RIPEMD-320
  • സ്നെഫ്രു
  • കടുവ (ചുഴി
  • IP ഇന്റർനെറ്റ് ചെക്ക്സം (RFC 1071)

ലിങ്കുകൾ

വിക്കിമീഡിയ ഫൗണ്ടേഷൻ. 2010.

  • ഹെഷൻ മോഹിയൻ
  • ഹാഷ് കോഡ്

മറ്റ് നിഘണ്ടുവുകളിൽ "ഹാഷ് ഫംഗ്ഷൻ" എന്താണെന്ന് കാണുക:

    ഹാഷ് ഫംഗ്ഷൻ- ഒരു (വളരെ) വലിയ മൂല്യങ്ങളിൽ നിന്ന് മൂല്യങ്ങളുടെ (ഗണ്യമായി) ചെറിയ സെറ്റ് മൂല്യങ്ങളിലേക്ക് മാപ്പ് ചെയ്തുകൊണ്ട് ഒരു ഡാറ്റ അറേയുടെ ഹാഷിംഗ് നടത്തുന്ന ഒരു ഫംഗ്ഷൻ. ഇംഗ്ലീഷിൽ: ഹാഷ് ഫംഗ്‌ഷൻ ഇതും കാണുക: ക്രിപ്‌റ്റോഗ്രാഫിക് അൽഗോരിതംസ് ഫിനാൻഷ്യൽ... ... സാമ്പത്തിക നിഘണ്ടു

    ക്രിപ്റ്റോഗ്രാഫിക് ഹാഷ് ഫംഗ്ഷൻ- അനിയന്ത്രിതമായ ദൈർഘ്യമുള്ള ടെക്‌സ്‌റ്റിനെ ഒരു നിശ്ചിത (മിക്ക കേസുകളിലും ചെറിയ) ദൈർഘ്യമുള്ള ടെക്‌സ്‌റ്റാക്കി മാറ്റുന്ന ഒരു ഫംഗ്‌ഷൻ. ഡിജിറ്റൽ സിഗ്നേച്ചർ സ്കീമിലാണ് ഹാഷ് ഫംഗ്ഷനുകളുടെ പ്രധാന പ്രയോഗം. ഒരു ഡിജിറ്റൽ സിഗ്നേച്ചറിനേക്കാൾ വേഗത്തിൽ ഹാഷ് ഫംഗ്ഷൻ കണക്കാക്കുന്നതിനാൽ, പകരം... ...

    വൺ വേ ഹാഷ് ഫംഗ്ഷൻ- ഹാഷ് ഫംഗ്ഷൻ, ഇത് ഒരു കമ്പ്യൂട്ടേഷണൽ റിവേഴ്‌സബിൾ ഫംഗ്‌ഷനാണ്. ഇംഗ്ലീഷിൽ: വൺ വേ ഹാഷ് ഫംഗ്‌ഷൻ ഇതും കാണുക: ക്രിപ്‌റ്റോഗ്രാഫിക് അൽഗോരിതംസ് ഫിനാൻഷ്യൽ ഡിക്ഷണറി ഫിനാം... സാമ്പത്തിക നിഘണ്ടു

    TIGER - ഹാഷ് ഫംഗ്ഷൻ- 1996-ൽ റോസ് ആൻഡേഴ്സണും എലി ബെഹാമും വികസിപ്പിച്ച ടൈഗർ ഹാഷ് ഫംഗ്ഷൻ. ആധുനിക കമ്പ്യൂട്ടറുകളിൽ, പ്രത്യേകിച്ച് 64-ബിറ്റ് കമ്പ്യൂട്ടറുകളിൽ വളരെ വേഗത്തിൽ രൂപകൽപ്പന ചെയ്‌തിരിക്കുന്ന ഒരു പുതിയ ഫാസ്റ്റ് ഹാഷ് ഫംഗ്‌ഷനാണ് TIGER ഹാഷ് ഫംഗ്‌ഷൻ. കടുവ... ... വിക്കിപീഡിയ

    വൺ-വേ ഹാഷ് ഫംഗ്ഷൻ- ഒരു വൺ-വേ ഫംഗ്‌ഷനായി, അതിന്റെ മൂല്യങ്ങൾ തുല്യമായ രണ്ട് വ്യത്യസ്ത ആർഗ്യുമെന്റുകൾ കണ്ടെത്തുന്നത് കമ്പ്യൂട്ടേഷണലി അസാധ്യമാണ്. [] വിഷയങ്ങൾ വിവര സുരക്ഷ EN വൺ വേ ഹാഷ് ഫംഗ്ഷൻ ... സാങ്കേതിക വിവർത്തകന്റെ ഗൈഡ്

    കടുവ (ഹാഷ് ഫംഗ്ഷൻ)- 1995-ൽ റോസ് ആൻഡേഴ്സണും എലി ബെഹാമും ചേർന്ന് വികസിപ്പിച്ച ടൈഗർ ഹാഷ് ഫംഗ്ഷൻ. 64-ബിറ്റ് കമ്പ്യൂട്ടറുകളിൽ പ്രത്യേകിച്ച് വേഗത്തിൽ പ്രവർത്തിക്കാനാണ് ടൈഗർ രൂപകൽപ്പന ചെയ്തിരിക്കുന്നത്. കടുവയ്ക്ക് പേറ്റന്റ് നിയന്ത്രണങ്ങളൊന്നുമില്ല, ഇത് ഉപയോഗിച്ച് സ്വതന്ത്രമായി ഉപയോഗിക്കാം... ... വിക്കിപീഡിയ

    ഹാഷ് ഫംഗ്ഷൻ- ഹാഷ് ഫംഗ്‌ഷൻ 1. ഒരു ഹാഷ് ടേബിളിലേക്ക് ഡാറ്റ നൽകുന്നതിനുള്ള പ്രക്രിയയെ നിയന്ത്രിക്കുന്ന ഒരു ഫംഗ്‌ഷൻ, നിർണ്ണയിക്കുന്നു (സ്വതന്ത്ര സെല്ലുകളുടെ വിലാസങ്ങൾ. 2. ഒരു തുറന്ന സന്ദേശത്തിന്റെ ഒരു ശകലത്തിന്റെ ഒരു നിശ്ചിത ദൈർഘ്യമുള്ള എൻക്രിപ്റ്റ് ചെയ്‌ത സ്‌ട്രിംഗിലേക്ക് മാപ്പിംഗ് ചെയ്യുന്നതിനെ പ്രതിനിധീകരിക്കുന്ന ഒരു ഫംഗ്‌ഷൻ. ഇതിൽ...... സാങ്കേതിക വിവർത്തകന്റെ ഗൈഡ്

    ഹാഷ് ടേബിൾ- പ്രോഗ്രാമിംഗിൽ, ഒരു ഹാഷ് ടേബിൾ അസോസിയേറ്റീവ് അറേ ഇന്റർഫേസ് നടപ്പിലാക്കുന്ന ഒരു ഡാറ്റാ ഘടനയാണ്, അതായത്, ജോഡികൾ (കീ, മൂല്യം) സംഭരിക്കാനും മൂന്ന് പ്രവർത്തനങ്ങൾ നടത്താനും ഇത് നിങ്ങളെ അനുവദിക്കുന്നു: ഒരു പുതിയ ജോഡി ചേർക്കുന്നതിനുള്ള പ്രവർത്തനം, തിരയൽ പ്രവർത്തനം, ഇല്ലാതാക്കൽ പ്രവർത്തനം... വിക്കിപീഡിയ

    ഹാഷ് കോഡ്- ഹാഷിംഗ് (ചിലപ്പോൾ ഹാഷിംഗ്, ഇംഗ്ലീഷ് ഹാഷിംഗ്) അനിയന്ത്രിതമായ ദൈർഘ്യമുള്ള ഒരു ഇൻപുട്ട് ഡാറ്റ അറേയെ ഒരു നിശ്ചിത ദൈർഘ്യമുള്ള ഔട്ട്‌പുട്ട് ബിറ്റ് സ്‌ട്രിംഗിലേക്ക് പരിവർത്തനം ചെയ്യുന്നു. അത്തരം പരിവർത്തനങ്ങളെ ഹാഷ് ഫംഗ്‌ഷനുകൾ അല്ലെങ്കിൽ കൺവ്യൂഷൻ ഫംഗ്‌ഷനുകൾ എന്നും വിളിക്കുന്നു, അവയുടെ ഫലങ്ങൾ... ... വിക്കിപീഡിയ

    ഹാഷ് ഫംഗ്ഷൻ കൂട്ടിയിടി- H(x) = H(y) എന്നിങ്ങനെ രണ്ട് വ്യത്യസ്ത ഇൻപുട്ട് ഡാറ്റ ബ്ലോക്കുകളായ x, y എന്നിവയാണ് ഒരു ഹാഷ് ഫംഗ്‌ഷൻ H കൂട്ടിയിടി. മിക്ക ഹാഷ് ഫംഗ്‌ഷനുകൾക്കും കൂട്ടിയിടികൾ നിലവിലുണ്ട്, എന്നാൽ “നല്ല” ഹാഷ് ഫംഗ്‌ഷനുകൾക്ക് അവയുടെ ആവൃത്തിയുടെ ആവൃത്തി സൈദ്ധാന്തിക മിനിമത്തിന് അടുത്താണ്. ഇൻ... ... വിക്കിപീഡിയ

ഞങ്ങൾ പരിഗണിച്ച തിരയൽ അൽഗോരിതങ്ങൾ സാധാരണയായി ഒരു അമൂർത്ത താരതമ്യ പ്രവർത്തനത്തെ അടിസ്ഥാനമാക്കിയുള്ളതാണ്. ഈ ശ്രേണിയിൽ നിന്ന് വേറിട്ടുനിൽക്കുന്നത് "സിംബൽ ടേബിളുകളും ബൈനറി സെർച്ച് ട്രീകളും" എന്നതിൽ വിവരിച്ചിരിക്കുന്ന വിതരണ തിരയൽ രീതിയാണ്, അതിൽ കീ ഐ ഉള്ള ഘടകം പട്ടികയുടെ i-th സ്ഥാനത്ത് സംഭരിച്ചിരിക്കുന്നു, അത് നേരിട്ട് ആക്സസ് ചെയ്യാൻ നിങ്ങളെ അനുവദിക്കുന്നു. ഡിസ്ട്രിബ്യൂട്ടീവ് തിരയൽ ഒരു താരതമ്യ പ്രവർത്തനത്തിന്റെ ഓപ്പറണ്ടുകളേക്കാൾ പ്രധാന മൂല്യങ്ങളെ അറേ സൂചികകളായി ഉപയോഗിക്കുന്നു; പട്ടിക സൂചികകളുടെ അതേ ശ്രേണിയിൽ നിന്ന് കീകൾ വ്യത്യസ്ത പൂർണ്ണസംഖ്യകളാണെന്ന വസ്തുതയെ അടിസ്ഥാനമാക്കിയുള്ളതാണ് ഈ രീതി. ഈ അധ്യായത്തിൽ, കീകൾക്ക് അത്തരം സൗകര്യപ്രദമായ പ്രോപ്പർട്ടികൾ ഇല്ലാത്ത കൂടുതൽ സാധാരണ തിരയൽ ആപ്ലിക്കേഷനുകളിൽ ഉപയോഗിക്കുന്ന ഡിസ്ട്രിബ്യൂട്ടീവ് തിരയലിന്റെ വിപുലമായ പതിപ്പായ ഹാഷിംഗിനെക്കുറിച്ച് ഞങ്ങൾ നോക്കാം. ഈ സമീപനത്തിന്റെ അന്തിമഫലം താരതമ്യാധിഷ്ഠിത രീതികളിൽ നിന്ന് തികച്ചും വ്യത്യസ്തമാണ് - ലുക്ക്അപ്പ് കീകളെ മൂലകങ്ങളിലെ കീകളുമായി താരതമ്യം ചെയ്ത് നിഘണ്ടു ഡാറ്റ ഘടനകളിലൂടെ നാവിഗേറ്റ് ചെയ്യുന്നതിനുപകരം, കീകളുടെ ഗണിത പരിവർത്തനം നടത്തി പട്ടികയിലെ ഘടകങ്ങൾ നേരിട്ട് ആക്സസ് ചെയ്യാൻ ഞങ്ങൾ ശ്രമിക്കുന്നു. വിലാസങ്ങൾ പട്ടികയിലേക്ക്.

ഹാഷിംഗ് ഉപയോഗിച്ചുള്ള തിരയൽ അൽഗോരിതങ്ങൾക്ക് രണ്ട് വ്യത്യസ്ത ഭാഗങ്ങളുണ്ട്. തിരയൽ കീയെ പട്ടികയിലെ വിലാസമാക്കി മാറ്റുന്ന ഒരു ഹാഷ് ഫംഗ്ഷൻ കണക്കാക്കുക എന്നതാണ് ആദ്യപടി. വ്യത്യസ്തമായ കീകൾ വ്യത്യസ്ത വിലാസങ്ങളിലേക്ക് മാപ്പ് ചെയ്യും, പക്ഷേ പലപ്പോഴും രണ്ടോ അതിലധികമോ വ്യത്യസ്ത കീകൾക്ക് പട്ടികയിലെ ഒരേ വിലാസത്തിലേക്ക് മാപ്പ് ചെയ്യാൻ കഴിയും. അതിനാൽ, ഹാഷിംഗ് സെർച്ചിന്റെ രണ്ടാം ഭാഗം അത്തരം കീകൾ കൈകാര്യം ചെയ്യുന്ന കൂട്ടിയിടി റെസലൂഷൻ പ്രക്രിയയാണ്. ഈ അധ്യായത്തിൽ നമ്മൾ നോക്കുന്ന വൈരുദ്ധ്യ പരിഹാര സാങ്കേതികതകളിലൊന്ന് ലിങ്ക്ഡ് ലിസ്റ്റുകൾ ഉപയോഗിക്കുന്നു, അതിനാൽ തിരയൽ കീകളുടെ എണ്ണം മുൻകൂട്ടി പ്രവചിക്കാൻ ബുദ്ധിമുട്ടുള്ള ചലനാത്മക സാഹചര്യങ്ങളിൽ ഇതിന് ഉടനടി പ്രയോഗമുണ്ട്. മറ്റ് രണ്ട് കൂട്ടിയിടി മിഴിവ് രീതികൾ ഉയർന്ന നേട്ടം കൈവരിക്കുന്നു പ്രകടനംഘടകങ്ങൾ ഒരു നിശ്ചിത അറേയിൽ സംഭരിച്ചിരിക്കുന്നതിനാൽ തിരയുക. ഈ രീതികൾ മെച്ചപ്പെടുത്തുന്നതിനുള്ള ഒരു മാർഗം ഞങ്ങൾ പരിഗണിക്കും, പട്ടികയുടെ വലിപ്പം മുൻകൂട്ടി പ്രവചിക്കാൻ കഴിയാത്ത സന്ദർഭങ്ങളിൽ അവ ഉപയോഗിക്കാൻ അനുവദിക്കുന്നു.

സമയവും ഓർമ്മയും തമ്മിലുള്ള സന്തുലിതാവസ്ഥയുടെ മികച്ച ഉദാഹരണമാണ് ഹാഷിംഗ്. ഉപയോഗിച്ച മെമ്മറിയുടെ അളവിൽ പരിധി ഇല്ലെങ്കിൽ, ഒരു വിതരണ തിരയലിലെന്നപോലെ, ഒരു മെമ്മറി വിലാസമായി കീ ഉപയോഗിച്ച്, ഒരു മെമ്മറി ആക്സസ് ഉപയോഗിച്ച് ഏത് തിരച്ചിലും നടത്താം. എന്നിരുന്നാലും, ഈ അനുയോജ്യമായ കേസ് സാധാരണയായി നേടാനാവില്ല, കാരണം നീളമുള്ള കീകൾക്ക് വലിയ അളവിലുള്ള മെമ്മറി ആവശ്യമായി വരും. മറുവശത്ത്, നിയന്ത്രണങ്ങളൊന്നും ഉണ്ടായിരുന്നില്ലെങ്കിൽ ലീഡ് ടൈം, സീക്വൻഷ്യൽ സെർച്ച് രീതി ഉപയോഗിച്ച് ഏറ്റവും കുറഞ്ഞ മെമ്മറി ഉപയോഗിച്ച് അത് നേടാനാകും. മെമ്മറിയും സമയവും ന്യായമായ അളവിൽ ഉപയോഗിക്കുന്നതിനും ഈ രണ്ട് തീവ്രതകൾക്കിടയിൽ സന്തുലിതാവസ്ഥ കൈവരിക്കുന്നതിനുമുള്ള ഒരു മാർഗമാണ് ഹാഷിംഗ്. പ്രത്യേകിച്ചും, കോഡ് മാറ്റിയെഴുതുന്നതിനോ വ്യത്യസ്ത അൽഗോരിതങ്ങൾ തിരഞ്ഞെടുക്കുന്നതിനോ പകരം, പട്ടികയുടെ വലുപ്പം മാറ്റുന്നതിലൂടെ നിങ്ങൾക്ക് ഏത് ബാലൻസ് നിലനിർത്താനാകും.

കമ്പ്യൂട്ടർ സയൻസിലെ ക്ലാസിക് പ്രശ്നങ്ങളിലൊന്നാണ് ഹാഷിംഗ്: അതിന്റെ വിവിധ അൽഗോരിതങ്ങൾ വിശദമായി പഠിക്കുകയും വ്യാപകമായി ഉപയോഗിക്കുകയും ചെയ്യുന്നു. വളരെ അയഞ്ഞ അനുമാനങ്ങളിൽ, പട്ടികയുടെ വലുപ്പം പരിഗണിക്കാതെ തന്നെ, സ്ഥിരമായ നിർവ്വഹണ സമയമുള്ള ചിഹ്ന പട്ടികകളിൽ പ്രവർത്തനങ്ങൾ കണ്ടെത്തുന്നതിനും തിരുകുന്നതിനും പിന്തുണയ്‌ക്കുമെന്ന് ഞങ്ങൾ പ്രതീക്ഷിക്കുന്നു.

ഈ പ്രതീക്ഷിക്കുന്ന മൂല്യം ഏത് ചിഹ്ന പട്ടിക നടപ്പാക്കലിനും ഒപ്റ്റിമൽ സൈദ്ധാന്തിക പ്രകടനമാണ്, എന്നാൽ രണ്ട് പ്രധാന കാരണങ്ങളാൽ ഹാഷിംഗ് ഇപ്പോഴും ഒരു പരിഭ്രാന്തിയല്ല. ഒന്നാമതായി, ലീഡ് ടൈംകീ ദൈർഘ്യത്തെ ആശ്രയിച്ചിരിക്കുന്നു, യഥാർത്ഥ ആപ്ലിക്കേഷനുകളിൽ നീളമുള്ള കീകൾ ഉപയോഗിക്കുന്നത് പ്രാധാന്യമർഹിക്കുന്നതാണ്. രണ്ടാമതായി, തിരഞ്ഞെടുത്തതോ അടുക്കുന്നതോ പോലുള്ള മറ്റ് ചിഹ്ന പട്ടിക പ്രവർത്തനങ്ങളുടെ കാര്യക്ഷമമായ നടപ്പാക്കലുകൾ ഹാഷിംഗ് നൽകുന്നില്ല. ഈ അധ്യായത്തിൽ ഇവയും മറ്റ് പ്രശ്നങ്ങളും ഞങ്ങൾ വിശദമായി പരിശോധിക്കും.

ഹാഷ് പ്രവർത്തനങ്ങൾ

ഒന്നാമതായി, കീകളെ പട്ടിക വിലാസങ്ങളാക്കി മാറ്റുന്ന ഒരു ഹാഷ് ഫംഗ്ഷൻ കണക്കാക്കുന്നതിനുള്ള പ്രശ്നം പരിഹരിക്കേണ്ടത് ആവശ്യമാണ്. സാധാരണയായി, ഈ ഗണിത കണക്കുകൂട്ടൽ നടപ്പിലാക്കുന്നത് ബുദ്ധിമുട്ടുള്ള കാര്യമല്ല, പക്ഷേ വിവിധ സൂക്ഷ്മമായ അപകടങ്ങളിൽ അകപ്പെടാതിരിക്കാൻ നിങ്ങൾ ഇപ്പോഴും ശ്രദ്ധിക്കേണ്ടതുണ്ട്. നിങ്ങൾക്ക് M ഘടകങ്ങൾ ഉൾക്കൊള്ളാൻ കഴിയുന്ന ഒരു പട്ടിക ഉണ്ടെങ്കിൽ, ശ്രേണിയിലെ കീകളെ പൂർണ്ണസംഖ്യകളാക്കി മാറ്റുന്ന ഒരു ഫംഗ്ഷൻ നിങ്ങൾക്ക് ആവശ്യമാണ്. ഒരു ഐഡിയൽ ഹാഷ് ഫംഗ്‌ഷൻ കണക്കുകൂട്ടാൻ എളുപ്പമായിരിക്കണം കൂടാതെ ഒരു റാൻഡം ഫംഗ്‌ഷനോട് സാമ്യമുള്ളതായിരിക്കണം: ഏതൊരു ആർഗ്യുമെന്റിനും, ഫലങ്ങൾ ഏതെങ്കിലും അർത്ഥത്തിൽ തുല്യമായിരിക്കണം.

ഹാഷ് ഫംഗ്ഷൻ കീ തരത്തെ ആശ്രയിച്ചിരിക്കുന്നു. കൃത്യമായി പറഞ്ഞാൽ, സാധ്യമായ ഓരോ തരം കീകൾക്കും ഒരു പ്രത്യേക ഹാഷ് ഫംഗ്ഷൻ ആവശ്യമാണ്. കാര്യക്ഷമത വർദ്ധിപ്പിക്കുന്നതിന്, വ്യക്തമായ തരം പരിവർത്തനം ഒഴിവാക്കുന്നത് സാധാരണയായി അഭികാമ്യമാണ്, പകരം ഒരു മെഷീൻ പദത്തിലെ കീകളുടെ ബൈനറി പ്രാതിനിധ്യം ഗണിത കണക്കുകൂട്ടലുകളിൽ ഉപയോഗിക്കാവുന്ന ഒരു പൂർണ്ണസംഖ്യയായി പരിഗണിക്കുക എന്ന ആശയത്തിലേക്ക് തിരിയുക. ഹാഷിംഗ് ഉയർന്ന തലത്തിലുള്ള ഭാഷകൾക്ക് മുമ്പുള്ളതാണ് - ആദ്യകാല കമ്പ്യൂട്ടറുകളിൽ ഒരു മൂല്യത്തെ ഒരു സ്ട്രിംഗ് കീ അല്ലെങ്കിൽ ഒരു പൂർണ്ണസംഖ്യയായി കണക്കാക്കുന്നത് സാധാരണമായിരുന്നു. ചില ഉയർന്ന തലത്തിലുള്ള ഭാഷകൾ ഒരു പ്രത്യേക കമ്പ്യൂട്ടറിന്റെ കീകളുടെ പ്രാതിനിധ്യത്തെ ആശ്രയിക്കുന്ന പ്രോഗ്രാമുകൾ എഴുതുന്നത് ബുദ്ധിമുട്ടാക്കുന്നു, കാരണം അത്തരം പ്രോഗ്രാമുകൾ അന്തർലീനമായി മെഷീനുകളെ ആശ്രയിച്ചിരിക്കുന്നു, അതിനാൽ മറ്റൊരു കമ്പ്യൂട്ടറിലേക്ക് പോർട്ട് ചെയ്യുന്നത് ബുദ്ധിമുട്ടാണ്. സാധാരണഗതിയിൽ, ഹാഷ് ഫംഗ്‌ഷനുകൾ കീകളെ പൂർണ്ണസംഖ്യകളാക്കി മാറ്റുന്ന പ്രക്രിയയെ ആശ്രയിച്ചിരിക്കുന്നു, അതിനാൽ ഹാഷിംഗ് നടപ്പിലാക്കലുകൾ മെഷീൻ സ്വതന്ത്രവും കാര്യക്ഷമവുമാകുന്നത് ബുദ്ധിമുട്ടാണ്. പൊതുവേ, ലളിതമായ പൂർണ്ണസംഖ്യ അല്ലെങ്കിൽ ഫ്ലോട്ടിംഗ് പോയിന്റ് കീകൾ ഒരു മെഷീൻ ഓപ്പറേഷൻ ഉപയോഗിച്ച് പരിവർത്തനം ചെയ്യാൻ കഴിയും, എന്നാൽ സ്ട്രിംഗ് കീകൾക്കും മറ്റ് തരത്തിലുള്ള കോമ്പോസിറ്റ് കീകൾക്കും കൂടുതൽ ഓവർഹെഡും കാര്യക്ഷമതയിൽ കൂടുതൽ ശ്രദ്ധയും ആവശ്യമാണ്.

ഒരു നിശ്ചിത ശ്രേണിയിൽ നിന്നുള്ള കീകൾ ഫ്ലോട്ടിംഗ് പോയിന്റ് നമ്പറുകളായിരിക്കുമ്പോൾ ഒരുപക്ഷേ ഏറ്റവും ലളിതമായ സാഹചര്യമാണ്. ഉദാഹരണത്തിന്, കീകൾ 0-ൽ കൂടുതലും 1-ൽ താഴെയുമുള്ള സംഖ്യകളാണെങ്കിൽ, നിങ്ങൾക്ക് അവയെ M കൊണ്ട് ഗുണിച്ച് ഫലത്തെ ഏറ്റവും താഴ്ന്ന പൂർണ്ണസംഖ്യയിലേക്ക് റൌണ്ട് ചെയ്യുകയും 0-നും M - 1-നും ഇടയിലുള്ള ശ്രേണിയിൽ ഒരു വിലാസം നേടുകയും ചെയ്യാം; അത്തരമൊരു ഉദാഹരണം ചിത്രത്തിൽ കാണിച്ചിരിക്കുന്നു. 14.1 കീകൾ s-നേക്കാൾ വലുതും t-യിൽ കുറവുമാണെങ്കിൽ, അവയെ s കുറയ്ക്കുകയും t-s കൊണ്ട് ഹരിക്കുകയും അവയെ 0-നും 1-നും ഇടയിലുള്ള മൂല്യങ്ങളുടെ പരിധിയിലേക്ക് കൊണ്ടുവരികയും തുടർന്ന് M കൊണ്ട് ഗുണിച്ച് പട്ടികയിലെ വിലാസം നേടുകയും ചെയ്യാം. .


അരി. 14.1

0 നും 1 നും ഇടയിലുള്ള ഫ്ലോട്ടിംഗ് പോയിന്റ് നമ്പറുകളെ 97 വലുപ്പമുള്ള പട്ടികയുടെ സൂചികകളാക്കി മാറ്റാൻ, ആ സംഖ്യകളെ 97 കൊണ്ട് ഗുണിക്കുക. ഈ ഉദാഹരണത്തിൽ, മൂന്ന് കൂട്ടിയിടികൾ സംഭവിച്ചു: 17, 53, 76 എന്നിവയ്ക്ക് തുല്യമായ സൂചികകൾക്ക്. ഹാഷ് മൂല്യങ്ങൾ കീയുടെ ഏറ്റവും ഉയർന്ന ബിറ്റുകൾ നിർണ്ണയിക്കുന്നു, ലോ ഓർഡർ ബിറ്റുകൾ ഒരു പങ്കും വഹിക്കുന്നില്ല. ഒരു ഹാഷ് ഫംഗ്‌ഷൻ രൂപകൽപ്പന ചെയ്യുന്നതിന്റെ ലക്ഷ്യങ്ങളിലൊന്ന് ഈ അസന്തുലിതാവസ്ഥ ഇല്ലാതാക്കുക എന്നതാണ്, അങ്ങനെ ഓരോ ബിറ്റും കണക്കുകൂട്ടൽ സമയത്ത് കണക്കാക്കും.

കീകൾ w-bit integers ആണെങ്കിൽ, അവയെ floats ആക്കി 2 w കൊണ്ട് ഹരിച്ച് 0 നും 1 നും ഇടയിലുള്ള ശ്രേണിയിൽ ഫ്ലോട്ടുകൾ ഉണ്ടാക്കാം, തുടർന്ന് മുൻ ഖണ്ഡികയിലെ പോലെ M കൊണ്ട് ഗുണിക്കുക. ഫ്ലോട്ടിംഗ് പോയിന്റ് പ്രവർത്തനങ്ങൾക്ക് വളരെയധികം സമയമെടുക്കുകയും സംഖ്യകൾ ഓവർഫ്ലോ ഉണ്ടാക്കാൻ പര്യാപ്തമല്ലെങ്കിൽ, പൂർണ്ണസംഖ്യയുടെ ഗണിതശാസ്ത്രം ഉപയോഗിച്ച് അതേ ഫലം ലഭിക്കും: കീയെ M കൊണ്ട് ഗുണിക്കുക, തുടർന്ന് വലത് ഷിഫ്റ്റ് w ബിറ്റുകൾ 2 w കൊണ്ട് ഹരിക്കുക (അല്ലെങ്കിൽ, എങ്കിൽ ഗുണനം ഒരു ഓവർഫ്ലോയിൽ കലാശിക്കുന്നു, ഒരു ഷിഫ്റ്റ് ചെയ്യുക, തുടർന്ന് ഒരു ഗുണനം). കീകൾ ശ്രേണിയിലുടനീളം തുല്യമായി വിതരണം ചെയ്യപ്പെടുന്നില്ലെങ്കിൽ അത്തരം രീതികൾ ഹാഷിംഗിന് ഉപയോഗശൂന്യമാണ്, കാരണം ഹാഷ് മൂല്യം കീയുടെ മുൻനിര അക്കങ്ങൾ കൊണ്ട് മാത്രമേ നിർണ്ണയിക്കൂ.

w-ബിറ്റ് പൂർണ്ണസംഖ്യകൾക്കായുള്ള ലളിതവും കൂടുതൽ കാര്യക്ഷമവുമായ രീതി ഒരുപക്ഷേ ഏറ്റവും സാധാരണയായി ഉപയോഗിക്കുന്ന ഹാഷിംഗ് രീതികളിലൊന്നാണ് - പട്ടികയുടെ വലുപ്പം M ആയി ഒരു പ്രൈം നമ്പർ തിരഞ്ഞെടുക്കുകയും k നെ M കൊണ്ട് ഹരിക്കുമ്പോൾ ബാക്കിയുള്ളത് കണക്കാക്കുകയും ചെയ്യുക, അതായത്. h(k) = k മോഡ് M ഏത് പൂർണ്ണസംഖ്യ കീയ്ക്കും k. ഈ പ്രവർത്തനത്തെ മോഡുലാർ ഹാഷ് ഫംഗ്ഷൻ എന്ന് വിളിക്കുന്നു. ഇത് കണക്കാക്കുന്നത് വളരെ എളുപ്പമാണ് (C++ ൽ k% M) കൂടാതെ M-ൽ താഴെയുള്ള മൂല്യങ്ങൾക്കിടയിൽ കീ മൂല്യങ്ങളുടെ തുല്യമായ വിതരണം നേടുന്നതിൽ ഫലപ്രദമാണ്. ഒരു ചെറിയ ഉദാഹരണം ചിത്രം 1-ൽ കാണിച്ചിരിക്കുന്നു. 14.2


അരി. 14.2

വലതുവശത്തുള്ള മൂന്ന് നിരകൾ താഴെ പറയുന്ന ഫംഗ്ഷനുകൾ ഉപയോഗിച്ച് ഇടതുവശത്ത് കാണിച്ചിരിക്കുന്ന 16-ബിറ്റ് കീകൾ ഹാഷ് ചെയ്തതിന്റെ ഫലം കാണിക്കുന്നു:

v% 97 (ഇടത്)

v% 100 (മധ്യത്തിൽ) ഒപ്പം

(int) (a * v) % 100 (വലത്),

ഇവിടെ a = .618033. ഈ ഫംഗ്‌ഷനുകളുടെ പട്ടിക വലുപ്പങ്ങൾ യഥാക്രമം 97, 100, 100 എന്നിവയാണ്. മൂല്യങ്ങൾ ക്രമരഹിതമായി ദൃശ്യമാകുന്നു (കീകൾ ക്രമരഹിതമായതിനാൽ). രണ്ടാമത്തെ ഫംഗ്‌ഷൻ (v % 100) കീകളുടെ ഏറ്റവും വലതുവശത്തുള്ള രണ്ട് അക്കങ്ങൾ മാത്രമേ ഉപയോഗിക്കുന്നുള്ളൂ, അതിനാൽ ക്രമരഹിതമായ കീകളുടെ പ്രകടനം മോശമായേക്കാം.

ഫ്ലോട്ടിംഗ് പോയിന്റ് കീകൾക്കും മോഡുലാർ ഹാഷിംഗ് ബാധകമാണ്. കീകൾ ഒരു ചെറിയ ശ്രേണിയിലാണെങ്കിൽ, നിങ്ങൾക്ക് അവയെ 0-നും 1.2w-നും ഇടയിലുള്ള സംഖ്യകളിലേക്ക് സ്കെയിൽ ചെയ്ത് w-bit integer മൂല്യങ്ങൾ നിർമ്മിക്കാൻ കഴിയും, തുടർന്ന് ഒരു മോഡുലാർ ഹാഷ് ഫംഗ്ഷൻ ഉപയോഗിക്കുക. മോഡുലാർ ഹാഷ് ഫംഗ്‌ഷന്റെ ഓപ്പറണ്ടായി കീയുടെ ബൈനറി പ്രാതിനിധ്യം (ലഭ്യമെങ്കിൽ) ഉപയോഗിക്കുക എന്നതാണ് മറ്റൊരു ഉപാധി.

ഒരു മെഷീൻ വേഡ് പ്രതിനിധീകരിക്കുന്ന പൂർണ്ണസംഖ്യകളായാലും, ഒരു മെഷീൻ പദത്തിൽ പാക്ക് ചെയ്തിരിക്കുന്ന പ്രതീകങ്ങളുടെ ക്രമമായാലും അല്ലെങ്കിൽ സാധ്യമായ മറ്റേതെങ്കിലും വേരിയന്റിനാൽ പ്രതിനിധീകരിക്കപ്പെട്ടാലും, കീകൾ നിർമ്മിക്കുന്ന ബിറ്റുകളിലേക്ക് ആക്സസ് ഉള്ള എല്ലാ സാഹചര്യങ്ങളിലും മോഡുലാർ ഹാഷിംഗ് ഉപയോഗിക്കുന്നു. എല്ലാ ബിറ്റുകളും എൻകോഡിംഗിനായി ഉപയോഗിക്കാത്തതിനാൽ, ഒരു മെഷീൻ വേഡിലേക്ക് പായ്ക്ക് ചെയ്ത ക്രമരഹിതമായ പ്രതീകങ്ങളുടെ ഒരു ശ്രേണി, ക്രമരഹിതമായ പൂർണ്ണസംഖ്യ കീകൾക്ക് തുല്യമല്ല. എന്നാൽ ഈ രണ്ട് തരങ്ങളും (ഒപ്പം ഒരു മെഷീൻ വാക്കിലേക്ക് യോജിക്കുന്നതിനായി എൻകോഡ് ചെയ്‌ത മറ്റേതെങ്കിലും കീ തരങ്ങളും) ഒരു ചെറിയ പട്ടികയിൽ ക്രമരഹിതമായ സൂചികകളായി ദൃശ്യമാക്കാൻ കഴിയും.

മോഡുലാർ ഹാഷിംഗിനായി ഒരു പ്രൈം ഹാഷ് ടേബിൾ സൈസ് എം തിരഞ്ഞെടുക്കുന്നതിനുള്ള പ്രധാന കാരണം ചിത്രത്തിൽ കാണിച്ചിരിക്കുന്നു. 14.3 7-ബിറ്റ് പ്രതീക ഡാറ്റയുടെ ഈ ഉദാഹരണത്തിൽ, കീയെ അടിസ്ഥാന 128 നമ്പറായി കണക്കാക്കുന്നു - കീയിലെ ഓരോ പ്രതീകത്തിനും ഒരു അക്കം. ഈ വാക്ക് ഇപ്പോൾ 1816567 എന്ന സംഖ്യയുമായി യോജിക്കുന്നു, അത് ഇങ്ങനെയും എഴുതാം

കാരണം ASCII കോഡിലെ n, o, w എന്നീ പ്രതീകങ്ങൾ 1568 = 110, 1578 = 111, 1678 = 119 എന്നീ സംഖ്യകളുമായി പൊരുത്തപ്പെടുന്നു. ഈ കീ തരത്തിന് M = 64 എന്ന ടേബിൾ വലുപ്പം തിരഞ്ഞെടുക്കുന്നത് നിർഭാഗ്യകരമാണ്, കാരണം 64 (അല്ലെങ്കിൽ 128) ന്റെ ഗുണിതങ്ങൾ x-ലേക്ക് ചേർക്കുന്നത് x mod 64-ന്റെ മൂല്യത്തെ മാറ്റില്ല - ഏത് കീയ്‌ക്കും, അവസാന 6 അക്കങ്ങളുടെ മൂല്യമാണ് ഹാഷ് മൂല്യം. ആ താക്കോലിന്റെ. തീർച്ചയായും, ഒരു നല്ല ഹാഷ് ഫംഗ്ഷൻ കീയുടെ എല്ലാ ബിറ്റുകളും കണക്കിലെടുക്കണം, പ്രത്യേകിച്ച് പ്രതീക കീകൾക്കായി. M-ൽ 2-ന്റെ പവർ ഉള്ള ഒരു ഘടകം അടങ്ങിയിരിക്കുമ്പോൾ സമാനമായ സാഹചര്യങ്ങൾ ഉണ്ടാകാം. ഇത് ഒഴിവാക്കാനുള്ള ഏറ്റവും ലളിതമായ മാർഗ്ഗം M-നായി ഒരു പ്രൈം നമ്പർ തിരഞ്ഞെടുക്കുക എന്നതാണ്.


അരി. 14.3

ഈ പട്ടികയുടെ ഓരോ വരിയിലും അടങ്ങിയിരിക്കുന്നു: 3-അക്ഷര വാക്ക്, ഒക്ടൽ, ഡെസിമൽ ഫോമുകളിൽ 21-ബിറ്റ് സംഖ്യയായി ആ വാക്കിന്റെ ഒരു ASCII പ്രാതിനിധ്യം, 64, 31 എന്നീ ടേബിൾ സൈസുകൾക്കുള്ള സ്റ്റാൻഡേർഡ് മോഡുലാർ ഹാഷ് ഫംഗ്ഷനുകൾ (വലതുവശത്തുള്ള രണ്ട് നിരകൾ). 64 എന്ന ടേബിൾ സൈസ് അനഭിലഷണീയമായ ഫലങ്ങൾ നൽകുന്നു, കാരണം കീയുടെ ഏറ്റവും വലത് ബിറ്റുകൾ മാത്രമേ ഹാഷ് മൂല്യം ലഭിക്കാൻ ഉപയോഗിക്കുന്നുള്ളൂ, സാധാരണ ഭാഷാ വാക്കുകളിലെ അക്ഷരങ്ങൾ തുല്യമായി വിതരണം ചെയ്യപ്പെടുന്നില്ല. ഉദാഹരണത്തിന്, y എന്ന അക്ഷരത്തിൽ അവസാനിക്കുന്ന എല്ലാ പദങ്ങൾക്കും ഹാഷ് മൂല്യം 57 ആണ്. നേരെമറിച്ച്, ലളിതമായ മൂല്യം 31 പകുതിയിലധികം വലിപ്പമുള്ള ഒരു പട്ടികയിൽ കുറച്ച് കൂട്ടിയിടികൾക്ക് കാരണമാകുന്നു.

മോഡുലാർ ഹാഷിംഗ് നടപ്പിലാക്കാൻ വളരെ ലളിതമാണ്, ടേബിൾ സൈസ് ഒരു പ്രൈം നമ്പറായിരിക്കണം എന്നതൊഴിച്ചാൽ. ചില ആപ്ലിക്കേഷനുകൾക്കായി, അറിയപ്പെടുന്ന ഒരു ചെറിയ പ്രൈം നമ്പർ ഉപയോഗിച്ച് നിങ്ങൾക്ക് സംതൃപ്തരാകാം, അല്ലെങ്കിൽ ആവശ്യമുള്ള ടേബിൾ വലുപ്പത്തിന് അടുത്തുള്ള ഒന്നിനായി നിങ്ങൾക്ക് അറിയപ്പെടുന്ന പ്രൈം നമ്പറുകളുടെ ലിസ്റ്റ് തിരയാം. ഉദാഹരണത്തിന്, 2 t - 1 ന് തുല്യമായ സംഖ്യകൾ പ്രൈം എപ്പോൾ ആണ് t = 2, 3, 5, 7, 13, 17, 19 ഒപ്പം 31(ഒപ്പം t യുടെ മറ്റ് മൂല്യങ്ങളൊന്നുമില്ല< 31 ): это известные простые числа Мерсенна. Чтобы динамически распределить таблицу нужного размера, нужно вычислить простое число, близкое к этому значению. Такое вычисление нетривиально (хотя для этого и существует остроумный алгоритм, который будет рассмотрен в части 5), поэтому на практике обычно используют таблицу заранее вычисленных значений (см. рис. 14.4). Использование модульного хеширования - не единственная причина, по которой размер таблицы стоит сделать простым числом; еще одна причина рассматривается в разделе 14.4.


അരി. 14.4

2 n-ൽ താഴെയുള്ള ഏറ്റവും വലിയ അഭാജ്യ സംഖ്യകളുടെ ഈ പട്ടികയാണ് , ടേബിൾ സൈസ് ഒരു പ്രൈം നമ്പറാകാൻ നിങ്ങൾ ആഗ്രഹിക്കുന്ന സമയത്ത് ഒരു ഹാഷ് ടേബിൾ ഡൈനാമിക് ആയി അലോക്കേറ്റ് ചെയ്യാൻ ഉപയോഗിക്കാം. പരിധിയിൽ നൽകിയിരിക്കുന്ന ഏതൊരു പോസിറ്റീവ് മൂല്യത്തിനും, 2 ന്റെ ഫാക്ടറിൽ താഴെ വ്യത്യാസമുള്ള പ്രൈം നമ്പർ നിർണ്ണയിക്കാൻ ഈ പട്ടിക ഉപയോഗിക്കാം.

പൂർണ്ണസംഖ്യ കീകൾ കൈകാര്യം ചെയ്യുന്നതിനുള്ള മറ്റൊരു ഉപാധിയാണ് ഗുണിതവും മോഡുലാർ രീതികളും സംയോജിപ്പിക്കുന്നത്: നിങ്ങൾ കീയെ 0 നും 1 നും ഇടയിലുള്ള സ്ഥിരാങ്കം കൊണ്ട് ഗുണിക്കുക, തുടർന്ന് M മോഡുലോ ഹരിക്കുക. മറ്റൊരു രീതിയിൽ പറഞ്ഞാൽ, നിങ്ങൾ ഫംഗ്ഷൻ ഉപയോഗിക്കേണ്ടതുണ്ട് . , M ന്റെ മൂല്യങ്ങളും കീയുടെ ഫലപ്രദമായ റാഡിക്സും തമ്മിൽ ഒരു ബന്ധമുണ്ട്, അത് സൈദ്ധാന്തികമായി അസാധാരണ സ്വഭാവത്തിലേക്ക് നയിച്ചേക്കാം, എന്നാൽ a യുടെ ഏകപക്ഷീയമായ മൂല്യം ഉപയോഗിക്കുകയാണെങ്കിൽ, ഒരു യഥാർത്ഥ ആപ്ലിക്കേഷനിൽ എന്തെങ്കിലും പ്രശ്നം ഉണ്ടാകാൻ സാധ്യതയില്ല. പലപ്പോഴും മൂല്യം φ = 0.618033... (സ്വർണ്ണ അനുപാതം) a ആയി തിരഞ്ഞെടുക്കപ്പെടുന്നു.

ഈ തീമിലെ മറ്റ് പല വ്യതിയാനങ്ങളും പര്യവേക്ഷണം ചെയ്തിട്ടുണ്ട്, പ്രത്യേകിച്ച് ഹാഷ് ഫംഗ്‌ഷനുകൾ, ഷിഫ്റ്റ്, മാസ്‌ക് അലോക്കേഷൻ എന്നിവ പോലുള്ള കാര്യക്ഷമമായ മെഷീൻ നിർദ്ദേശങ്ങൾ ഉപയോഗിച്ച് ഇത് നടപ്പിലാക്കാൻ കഴിയും (റഫറൻസ് വിഭാഗം കാണുക).

ചിഹ്ന പട്ടികകൾ ഉപയോഗിക്കുന്ന പല ആപ്ലിക്കേഷനുകളിലും, കീകൾ അക്കങ്ങളല്ല, അവ ചെറുതായിരിക്കണമെന്നില്ല; മിക്കപ്പോഴും ഇവ ആൽഫാന്യൂമെറിക് സ്ട്രിംഗുകളാണ്, അത് വളരെ ദൈർഘ്യമേറിയതായിരിക്കും. അപ്പോൾ നിങ്ങൾ എങ്ങനെയാണ് averylongkey പോലുള്ള ഒരു വാക്കിനായി ഒരു ഹാഷ് ഫംഗ്ഷൻ കണക്കാക്കുന്നത്?

7-ബിറ്റ് ASCII കോഡിൽ, ഈ വാക്ക് 84-ബിറ്റ് നമ്പറുമായി യോജിക്കുന്നു \begin(align*) 97 \cdot 128^(11) &+ 118 \cdot 128^(10) + 101 \cdot 128^(9) + 114 \ cdot 128^(8) + 121 \cdot 128^(7)\\ &+ 108 \cdot 128^(6) + 111 \cdot 128^(5) + 110 \cdot 128^(4) + 103 \ cdot 128 ^(3)\\ &+ 107 \cdot 128^(2) + 101 \cdot 128^(1) + 121 \cdot 128^(0), \end(align*),

മിക്ക കമ്പ്യൂട്ടറുകളിലും സാധാരണ ഗണിത പ്രവർത്തനങ്ങൾ കൈകാര്യം ചെയ്യാൻ കഴിയാത്തത്ര വലുതാണ്. പലപ്പോഴും ദൈർഘ്യമേറിയ കീകൾ പ്രോസസ്സ് ചെയ്യേണ്ടത് ആവശ്യമാണ്.

ദൈർഘ്യമേറിയ കീകൾക്കായി ഒരു മോഡുലാർ ഹാഷ് ഫംഗ്ഷൻ കണക്കാക്കാൻ, അവ ശകലം ഉപയോഗിച്ച് പരിവർത്തനം ചെയ്യുന്നു. നിങ്ങൾക്ക് മോഡുലസ് ഫംഗ്‌ഷന്റെ ഗണിത ഗുണങ്ങൾ പ്രയോജനപ്പെടുത്തുകയും ഹോർണറിന്റെ അൽഗോരിതം ഉപയോഗിക്കുകയും ചെയ്യാം (വിഭാഗം 4.9 "അമൂർത്ത ഡാറ്റ തരങ്ങൾ" കാണുക). ഈ രീതി കീകളുമായി ബന്ധപ്പെട്ട സംഖ്യകൾ എഴുതുന്നതിനുള്ള മറ്റൊരു രീതിയെ അടിസ്ഥാനമാക്കിയുള്ളതാണ്. പരിഗണനയിലിരിക്കുന്ന ഉദാഹരണത്തിനായി, ഞങ്ങൾ ഇനിപ്പറയുന്ന പദപ്രയോഗം എഴുതുന്നു: \begin(align*) (((((((97 \cdot 128^(11)) &+ 118))) \cdot 128^(10)) + 101)) \ cdot 128^( 9) + 114) \cdot 128^(8) + 121) \cdot 128^(7)\\ &+ 108) \cdot 128^(6) + 111) \cdot 128^(5) + 110) \cdot 128^(4) + 103) \cdot 128^(3)\\ &+ 107) \cdot 128^(2) + 101) \cdot 128^(1) + 121. \end(align* )

അതായത്, ഒരു സ്‌ട്രിംഗിന്റെ പ്രതീക എൻകോഡിംഗുമായി ബന്ധപ്പെട്ട ദശാംശ സംഖ്യ അത് ഇടത്തുനിന്ന് വലത്തോട്ട് സ്‌കാൻ ചെയ്‌ത് കണക്കാക്കാം, സഞ്ചിത മൂല്യത്തെ 128 കൊണ്ട് ഗുണിച്ച് അടുത്ത പ്രതീകത്തിന്റെ എൻകോഡിംഗ് മൂല്യം ചേർക്കുക. ഒരു നീണ്ട സ്ട്രിംഗിന്റെ കാര്യത്തിൽ, ഈ കണക്കുകൂട്ടൽ രീതി ഒടുവിൽ കമ്പ്യൂട്ടറിൽ സാധാരണയായി പ്രതിനിധീകരിക്കാവുന്നതിനേക്കാൾ വലിയ സംഖ്യയിലേക്ക് നയിക്കും. എന്നിരുന്നാലും, ഈ സംഖ്യ ആവശ്യമില്ല, കാരണം അതിന്റെ ഡിവിഷൻ M കൊണ്ട് (ചെറിയ) ബാക്കിയുള്ളത് മാത്രമേ ആവശ്യമുള്ളൂ, ഒരു വലിയ സഞ്ചിത മൂല്യം പോലും സംഭരിക്കാതെ തന്നെ ഫലം ലഭിക്കും, കാരണം കണക്കുകൂട്ടലിന്റെ ഏത് ഘട്ടത്തിലും, നമുക്ക് M ന്റെ ഗുണിതം നിരസിക്കാൻ കഴിയും - ഓരോ തവണയും നമ്മൾ ഗുണനവും സങ്കലനവും നടത്തുമ്പോൾ, നമുക്ക് ഡിവിഷൻ മൊഡ്യൂളോ M ന്റെ ബാക്കി സംഭരിച്ചാൽ മതിയാകും. നമുക്ക് കണക്കുകൂട്ടാൻ അവസരം ലഭിച്ചാൽ ഫലം സമാനമായിരിക്കും. ഒരു നീണ്ട സംഖ്യ തുടർന്ന് വിഭജനം നടത്തുക (കാണുക. വ്യായാമം 14.10). ഈ നിരീക്ഷണം നീളമുള്ള സ്ട്രിംഗുകൾക്കുള്ള മോഡുലാർ ഹാഷ് ഫംഗ്ഷനുകൾ കംപ്യൂട്ടുചെയ്യുന്നതിനുള്ള ഒരു നേരായ ഗണിത രീതിയിലേക്ക് നയിക്കുന്നു - പ്രോഗ്രാം 14.1 കാണുക. ഈ പ്രോഗ്രാം ഒരു അന്തിമ ട്രിക്ക് ഉപയോഗിക്കുന്നു: അടിസ്ഥാനം 128 ഉപയോഗിക്കുന്നതിനുപകരം, ഇത് പ്രൈം നമ്പർ 127 ഉപയോഗിക്കുന്നു. ഈ മാറ്റത്തിന്റെ കാരണം അടുത്ത ഖണ്ഡികയിൽ ചർച്ചചെയ്യും.

ഹോർണറുടെ രീതി (കീയിലെ ഓരോ പ്രതീകത്തിനും ഒന്നോ രണ്ടോ ഗണിത പ്രവർത്തനങ്ങൾ) ഉപയോഗിച്ച് മോഡുലാർ ഹാഷിംഗിന്റെ അതേ വിലയിൽ ഹാഷ് ഫംഗ്ഷനുകൾ കണക്കാക്കാൻ നിരവധി മാർഗങ്ങളുണ്ട്. റാൻഡം കീകൾക്കായി, ഈ രീതികൾ പ്രായോഗികമായി സമാനമാണ്, എന്നാൽ യഥാർത്ഥ കീകൾ അപൂർവ്വമായി ക്രമരഹിതമാണ്. കുറഞ്ഞ ചെലവിൽ യഥാർത്ഥ കീകൾ ക്രമരഹിതമാക്കാനുള്ള കഴിവ് ക്രമരഹിതമായ ഹാഷിംഗ് അൽഗോരിതങ്ങൾ പരിഗണിക്കാൻ ഞങ്ങളെ പ്രേരിപ്പിക്കുന്നു, കാരണം കീ വിതരണം പരിഗണിക്കാതെ തന്നെ ഒരു ടേബിളിൽ ക്രമരഹിതമായ സൂചികകൾ സൃഷ്ടിക്കുന്ന ഹാഷ് ഫംഗ്ഷനുകൾ ഞങ്ങൾക്ക് ആവശ്യമാണ്. റാൻഡമൈസേഷൻ സംഘടിപ്പിക്കുന്നത് ബുദ്ധിമുട്ടുള്ള കാര്യമല്ല, കാരണം മോഡുലാർ ഹാഷിംഗിന്റെ നിർവചനം അക്ഷരാർത്ഥത്തിൽ പാലിക്കേണ്ട ആവശ്യമില്ല - M-നേക്കാൾ കുറവുള്ള ഒരു പൂർണ്ണസംഖ്യയുടെ കണക്കുകൂട്ടലിൽ, കീയുടെ എല്ലാ ബിറ്റുകളും ഉപയോഗിക്കേണ്ടത് ആവശ്യമാണ്.

പ്രോഗ്രാം 14.1. സ്ട്രിംഗ് കീകൾക്കുള്ള ഹാഷ് ഫംഗ്ഷൻ

M = 96, a = 128 (മുകളിൽ),

M = 97 ഉം a = 128 (മധ്യത്തിൽ) ഒപ്പം

M=96, a=127 (ചുവടെ)

പട്ടികയുടെ വലിപ്പവും ഘടകവും 32 ന്റെ ഗുണിതങ്ങളായതിനാൽ അക്ഷരങ്ങളുടെ അസമമായ ഉപയോഗത്തിന്റെയും അസമത്വം നിലനിൽക്കുന്നതിന്റെയും ഫലമാണ് ആദ്യ സന്ദർഭത്തിലെ അസമമായ വിതരണം. മറ്റ് രണ്ട് ഉദാഹരണങ്ങളും ക്രമരഹിതമായി കാണപ്പെടുന്നു, കാരണം പട്ടിക വലിപ്പവും ഘടകവും കോപ്രൈം നമ്പറുകളാണ്.

പ്രോഗ്രാം 14.1 ഇതിനുള്ള ഒരു വഴി കാണിക്കുന്നു: 2 ന്റെ ശക്തിക്ക് പകരം ഒരു അടിസ്ഥാന പ്രൈം ഉപയോഗിക്കുന്നു, സ്ട്രിംഗിന്റെ ASCII പ്രാതിനിധ്യത്തിന് അനുയോജ്യമായ ഒരു പൂർണ്ണസംഖ്യ. ചിത്രത്തിൽ. 14.5 ചിത്രം. ഈ മാറ്റം സാധാരണ സ്ട്രിംഗ് കീകൾക്കുള്ള വിതരണത്തെ എങ്ങനെ മെച്ചപ്പെടുത്തുന്നുവെന്ന് ചിത്രം 14.5 കാണിക്കുന്നു. സിദ്ധാന്തത്തിൽ, പ്രോഗ്രാം 14.1 നിർമ്മിച്ച ഹാഷ് മൂല്യങ്ങൾ 127 ന്റെ ഗുണിതങ്ങളുള്ള പട്ടിക വലുപ്പങ്ങൾക്ക് മോശം ഫലങ്ങൾ ഉണ്ടാക്കും (പ്രായോഗികമായി ഇത് മിക്കവാറും അദൃശ്യമായിരിക്കും); ക്രമരഹിതമായ ഒരു അൽഗോരിതം സൃഷ്ടിക്കുന്നതിന്, ഒരാൾക്ക് ക്രമരഹിതമായി ഒരു ഗുണിത മൂല്യം തിരഞ്ഞെടുക്കാം. കണക്കുകൂട്ടലിലെ ഗുണകങ്ങൾക്കായി ക്രമരഹിതമായ മൂല്യങ്ങളും കീയുടെ ഓരോ അക്കത്തിനും വ്യത്യസ്ത റാൻഡം മൂല്യവും ഉപയോഗിക്കുന്നതാണ് കൂടുതൽ കാര്യക്ഷമമായ സമീപനം. ഈ സമീപനം സാർവത്രിക ഹാഷിംഗ് എന്ന ക്രമരഹിതമായ അൽഗോരിതം നിർമ്മിക്കുന്നു.

സൈദ്ധാന്തികമായി, ഒരു ഐഡിയൽ യൂണിവേഴ്സൽ ഹാഷ് ഫംഗ്‌ഷൻ എന്നത് M വലുപ്പമുള്ള ഒരു പട്ടികയിലെ രണ്ട് വ്യത്യസ്ത കീകൾ തമ്മിലുള്ള കൂട്ടിയിടിയുടെ സംഭാവ്യത കൃത്യമായി 1/M ആണ്. ഒരു നിശ്ചിത അനിയന്ത്രിതമായ മൂല്യത്തിനുപകരം, പ്രോഗ്രാം 14.1 ലെ കോഫിഫിഷ്യന്റ് a ആയി ക്രമരഹിതമായ വ്യത്യസ്ത മൂല്യങ്ങളുടെ ഒരു ശ്രേണി ഉപയോഗിക്കുന്നത് മോഡുലാർ ഹാഷിംഗിനെ ഒരു സാർവത്രിക ഹാഷ് ഫംഗ്ഷനാക്കി മാറ്റുന്നുവെന്ന് തെളിയിക്കാനാകും. എന്നിരുന്നാലും, കീയിലെ ഓരോ പ്രതീകത്തിനും ഒരു പുതിയ റാൻഡം നമ്പർ സൃഷ്ടിക്കുന്നതിനുള്ള ചെലവ് സാധാരണയായി അസ്വീകാര്യമാണ്. പ്രായോഗികമായി, പ്രോഗ്രാം 14.1-ൽ കാണിച്ചിരിക്കുന്ന ഒത്തുതീർപ്പ് ഓരോ കീ പ്രതീകത്തിനും വ്യത്യസ്ത ക്രമരഹിത സംഖ്യകളുടെ ഒരു നിര സംഭരിക്കാതെ, ലളിതമായ ഒരു വ്യാജ-റാൻഡം സീക്വൻസ് സൃഷ്ടിച്ചുകൊണ്ട് ഗുണകങ്ങളിൽ വ്യത്യാസം വരുത്തുന്നതിലൂടെ നേടാനാകും.

ചുരുക്കത്തിൽ, ഒരു അമൂർത്ത ചിഹ്ന പട്ടിക നടപ്പിലാക്കാൻ ഹാഷിംഗ് ഉപയോഗിക്കുന്നതിന്, നിങ്ങൾ ആദ്യം ഒരു ഹാഷ് ഓപ്പറേഷൻ ഉൾപ്പെടുത്തുന്നതിന് അബ്‌സ്‌ട്രാക്റ്റ് ടൈപ്പ് ഇന്റർഫേസ് വിപുലീകരിക്കേണ്ടതുണ്ട്, ഇത് ടേബിളിന്റെ വലുപ്പത്തേക്കാൾ ചെറിയ നെഗറ്റീവ് അല്ലാത്ത പൂർണ്ണസംഖ്യകളിലേക്ക് കീകൾ മാപ്പ് ചെയ്യുന്നു.