Xesh funksiya



Yüklə 27,93 Kb.
tarix24.12.2023
ölçüsü27,93 Kb.
#160318
5 Xesh funksiya


Xesh funksiya

  1. Xesh jadvali - bu assotsiativ massiv interfeysini amalga oshiruvchi ma'lumotlar tuzilmasi, ya'ni juftlarni saqlashga (kalit, qiymat) va uchta amalni bajarishga imkon beradi: yangi juftlikni qo'shish, qidirish amali va juftlikni kalit bilan o'chirish. Xesh jadvallarining ikkita asosiy varianti mavjud: zanjirli va ochiq adreslash. Xesh jadvali ba'zi bir 𝐻 massivini o'z ichiga oladi, ularning elementlari juftliklar (ochiq adreslash bilan xesh jadvali) yoki juftliklar ro'yxati (zanjir bilan xesh jadvali) boʻladi. Xeshlash – bu ixtiyoriy uzunlikdagi kirish ma'lumotlari majmuasini ma'lum bir algoritm tomonidan bajarilgan, belgilangan o'lchamdagi chiqish massiviga aylantirish jarayoni. Bunday algoritmni amalga oshiruvchi funksiya xesh funksiya, transformatsiya natijasi xesh yoki xesh yigʻindisi deyiladi. Xesh funksiyasi quyidagi xususiyatlarga ega: - bir xil ma'lumotlar bir xil xeshni beradi; - "deyarli har doim" turli xil ma'lumotlar boshqacha xesh beradi

3.Oddiy xesh funksiyalar: Adler-32, CRC, FNV, Murmur2, PJW32, TTH, Jenkins hash. Kriptografik xesh funksiyalar: CubeHash, BLAKE, BMW, ECHO, FSB, Fugue, Grøstl, JH, Hamsi, HAVAL, Keccak (SHA-3), Kupyna, LM-хеш, Luffa, MD2, MD4, MD5, MD6, N-Hash, RIPEMD128, RIPEMD-160, RIPEMD-256, RIPEMD-320, SHA-1, SHA-2, SHABAL, SHAvite-3, SIMD, Skein, Snefru, SWIFFT, Tiger, Whirlpool, ГОСТ Р 34.11-94, ГОСТ Р 34.11-2012. Kalit hosil qiluvchi xesh funksiyalar: bcrypt, PBKDF2, scrypt. Kriptografik xesh funksiyalarning esa quyidagi turlari mavjud: 1) kalitli xesh funksiya; 2) kalitsiz xesh funksiya. Kalitli xesh funksiyalar simmetrik shifrlash algoritmi tizimlarida qo‘llaniladi. Kalitli xesh funksiyalar berilgan ma’lumot autentifikatsiyasi kodi (message authentication code(MAC)) deb ham yuritiladi. Ushbu kod bir-biriga ishonchi mavjud foydalanuvchilarga berilgan ma’lumotining haqiqiyligi va to‘laligini kafolatini qo‘shimcha vositalarsiz ta’minlash imkoniyatini tugʻdiradi.
4. Kriptografik xesh funksiyalar: CubeHash, BLAKE, BMW, ECHO, FSB, Fugue, Grøstl, JH, Hamsi, HAVAL, Keccak (SHA-3), Kupyna, LM-хеш, Luffa, MD2, MD4, MD5, MD6, N-Hash, RIPEMD128, RIPEMD-160, RIPEMD-256, RIPEMD-320, SHA-1, SHA-2, SHABAL, SHAvite-3, SIMD, Skein, Snefru, SWIFFT, Tiger, Whirlpool, ГОСТ Р 34.11-94, ГОСТ Р 34.11-2012.
5. Polinomial xeshlash. Quyida oddiy, ammo samarali xeshlash algoritmini ko'rib chiqamiz. Xesh funksiyamizni quyidagicha aniqlaylik: ℎ(𝑠) = ∑ 𝑏 𝑁−𝑖 ∙ code(𝑠𝑖) 𝑁 𝑖=0 (1) yoki ℎ(𝑝𝑟𝑒𝑓𝑓𝑖 ) = 𝑏 ∙ ℎ(𝑝𝑟𝑒𝑓𝑖−1 ) + 𝑐𝑜𝑑𝑒(𝑠𝑖−1 ), (2) bu yerda 𝑁 = 𝑠𝑡𝑟𝑙𝑒𝑛(𝑠) − 1, 𝑝𝑟𝑒𝑓𝑖 − uzunlik prefiksi i, 𝑏-baza, asos. 𝑐𝑜𝑑𝑒(𝑠𝑖 ) −simvol kodi. Agar (1) formulani kengaytirsak, biz N tartibli polinomni olamiz. (2) formula xeshni rekursiv shaklda o'rnatadi va kod yozishda foydalaniladi. Belgilar kodiga va asosga e'tibor qaratish lozim, chunki bazani tanlash kodlarga bogʻliq bo'ladi. Kod ASCII jadvalidagi belgilar kodi yoki alfavitdagi tartib raqam bo'lishi mumkin. Masalan, agar muammo har qanday satr ingliz alifbosining faqat kichik harflaridan iborat bo'lishiga kafolat beradigan bo'lsa, unda tartib raqami belgilar kodlari uchun yaxshi imkoniyatdir. Simvollar satrdagi mumkin bo'lgan har 162 qanday belgining maksimal kodidan oshib ketishi kerak va odatda asosiy son tanlanadi (garchi raqamning soddaligi uchun qat'iy talablarga javob bermagan bo'lsa ham). Masalan, 31, 37 va boshqalar asoslari inglizcha kichik harflarning satrlari uchun javob beradi
6. Shunga qaramay, shuni ta'kidlash joizki, biz xeshni hech qanday cheklamaymiz, bu xeshlash ta'rifiga ziddir. Bunday holda, ikkita chiqish usuli mavjud: modul boʻyicha boʻlish amalidan yoki uzun arifmetikadan foydalanish. Birinchi variant uzun arifmetikaga ega bo'lmagan tillarda keng qo'llaniladi. Bundan tashqari, xesh saqlanadigan butun sonli ma'lumotlar turi bu bo'linishni avtomatik ravishda amalga oshiradi (turlarning ko'payishi natijasida qo'shimcha bitlar avtomatik ravishda yo'qoladi). Natijada biz cheklangan xeshlar to'plamini olamiz, ammo yana kolliziya xavfi mavjud. Bundan tashqari, ko'p polinomli xeshni "buzish" ehtimoli mavjud. Ikkinchi variantda kolliziya ehtimoli pastroq. Biroq, kattaroq xeshlar to'plamini qo'llab-quvvatlash, qo'shimcha xotira va ikkita xeshni taqqoslash uchun zarur bo'lgan vaqtni talab qiladi, bu oddiy ma'lumotlarni taqqoslashdan ko'ra tezroq.
7. MD4 xeshlash algoritmi RSA Data Security, Inc. Ronald L. Rivest tomonidan ishlab chiqilgan. MD4 aralashgan algoritm hisoblanadi, Endi ishonchsiz hisoblanadi. Bu algoritm (32-bit protsessorlari uchun) tez va peer-to-peer tarmogʻi edonkey 2000 Qo'shma Algoritm hash kodi 32 ta simvoldan iborat bo'lgan belgilar bilan o'n oltilik soni RFC 1320. tasvirlangan hisoblash ishlatiladi. MD5 xesh funksiyasi algoritmi Massachusets texnologiya instituti professori Ronald Rivest tomonidan 1992 yilda ishlab chiqilgan. Bu 172 algoritmda kiruvchi ma’lumot uzunligi ixtiyoriy bo‘lib, xesh qiymat uzunligi 128 bit bo‘ladi. MD 5 xesh funksiyasi algoritmida kiruvchi ma’lumot 512 bitlik bloklarga ajratilib, ular 16 ta 32 bitlik qism bloklarga ajratiladi va bular ustida amallar bajariladi. Faraz qilaylik, bizga uzunligi b bit bo‘lgan, bu yerda b – ixtiyoriy nomanfiy butun son, ma’lumot berilgan bo‘lsin va bu ma’lumotning bitlari quyidagicha: m0m1…m(b-1) SHA-1 xesh funksiyasi algoritmi. Kafolatlangan bardoshlilikka ega bo‘lgan xeshlash algoritmi SHA (Secure Hash Algorithm) AQShning standartlar va texnologiyalar Milliy instituti (NIST) tomonidan ishlab chiqilgan bo‘lib, 1992 yilda axborotni qayta ishlash federal standarti (RUB FIPS 180) ko‘rinishida nashr qilindi. 1995 yilda bu standart qaytadan ko‘rib chiqildi va SHA-1 deb nomlandi (RUB FIPS 180-1). SHA algoritmi MD4 algoritmiga asoslanadi va uning tuzilishi MD4 algoritmining tuzilishiga juda yaqin. Bu algoritm DSS standarti asosidagi elektron raqamli imzo algoritmlarida ishlatish uchun mo‘ljallangan. Bu algoritmda kiruvchi ma’lumotning uzunligi 264 bitdan kichik bo‘lib, xesh qiymat uzunligi 160 bit bo‘ladi. Kiritilayotgan ma’lumot 512 bitlik bloklarga ajratilib qayta ishlanadi.
15. #include
#include
#include
#include
using namespace std;
// Xeshlangan ma'lumotni heksadecimal formatda chiqarish
string hexEncode(const unsigned char* data, size_t length) {
stringstream ss;
ss << hex << setfill('0');
for (size_t i = 0; i < length; ++i) {
ss << setw(2) << static_cast(data[i]);
}
return ss.str();
}

// SHA-256 xeshlangan ma'lumotni olish


string calculateSHA256(const string& data) {
unsigned char hash[SHA256_DIGEST_LENGTH];
SHA256(reinterpret_cast(data.c_str()), data.length(), hash);
return hexEncode(hash, SHA256_DIGEST_LENGTH);
}

// MD5 xeshlangan ma'lumotni olish


string calculateMD5(const string& data) {
unsigned char hash[MD5_DIGEST_LENGTH];
MD5(reinterpret_cast(data.c_str()), data.length(), hash);
return hexEncode(hash, MD5_DIGEST_LENGTH);
}

int main() {


// Xeshlangan ma'lumotni olish uchun matn
string input;
cout << "Ma'lumotni kiriting: ";
getline(std::cin, input);

// SHA-256 xeshlash


string sha256Hash = calculateSHA256(input);
cout << "SHA-256 xesh: " << sha256Hash << endl;

// MD5 xeshlash


string md5Hash = calculateMD5(input);
cout << "MD5 xesh: " << md5Hash << endl;

return 0;


}
16. #include
#include
using namespace std;

// Polinomial xesh funksiyasi


unsigned int calculatePolynomialHash(const std::string& str, int base, int mod) {
unsigned int hash = 0;
for (char c : str) {
hash = (hash * base + c) % mod;
}
return hash;
}

int main() {


// Matn
string text;
cout << "Matnni kiriting: ";
getline(cin, text);

// Polinomial xeshni hisoblash


unsigned int hash = calculatePolynomialHash(text, 31, 1000000007);

// Natijani chiqarish


cout << "Polinomial xesh: " << hash << endl;

return 0;


}
17. #include
using namespace std;

// Oddiy xesh (simple hash) funksiyasi


unsigned int calculateSimpleHash(const string& str) {
unsigned int hash = 0;
for (char c : str) {
hash += c;
}
return hash;
}

int main() {


// Matn
string text;
cout << "Matnni kiriting: ";
getline(cin, text);

// Oddiy xeshni hisoblash


unsigned int hash = calculateSimpleHash(text);

// Natijani chiqarish


cout << "Oddiy xesh: " << hash << endl;

return 0;


}
18. #include
#include
#include
using namespace std;

// Kriptografik xesh (SHA-256) funksiyasi


string calculateCryptographicHash(const string& str) {
unsigned char hash[SHA256_DIGEST_LENGTH];
SHA256(reinterpret_cast(str.c_str()), str.length(), hash);

stringstream ss;


ss << hex << setfill('0');
for (int i = 0; i < SHA256_DIGEST_LENGTH; ++i) {
ss << setw(2) << static_cast(hash[i]);
}

return ss.str();


}

int main() {


// Matn
string text;
cout << "Matnni kiriting: ";
getline(cin, text);

// Kriptografik xeshni hisoblash


string hash = calculateCryptographicHash(text);

// Natijani chiqarish


cout << "Kriptografik xesh: " << hash << endl;

return 0;


}
19. Yangi xesh algoritmlar xam yaratilmoqda. Yangi xesh algoritmlar kolliziyaga bardoshli, xesh qiymatning tez hisob-kitob qila olishi va.h.k xususiyatlarga ega boʻladi. Xesh funksiyalar asosan, Elektron raqamli imzo (ERI)da, Torrent, DC Hub, Operatsion sistemalarda va fayllarning butunliligini yoki oʻzgartirilganligini nazorat qilish uchun foydalaniladi. Axborot butunligini nazorat qilishning koʻproq maqbul boʻlgan metodlaridan biri xesh-funksiyadan foydalanish hisoblanadi. Xesh-funksiyaning qiymatini uning kalitini bilmasdan turib qalbakilashtirib boʻlmaydi, shu sababli xeshlash kalitini shifrlangan koʻrinishda yoki jinoyatchining «qoʻli yetmaydigan» joydagi xotirada saqlash kerak

Yüklə 27,93 Kb.

Dostları ilə paylaş:




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©genderi.org 2024
rəhbərliyinə müraciət

    Ana səhifə